����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 172.67.215.126  /  Your IP : 172.69.130.92
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-172-31-19-221 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.1.28
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceAzure.cpython-310.pyc
o

x[h�.�@s�UddlZddlZddlZddlZddlZddlZddlZddlmm	Z
ddlmZddl
mZddlmZmZmZddlmZmZmZmZddlZddlmZmZmZmZmZmZddlm Z m!Z!ddl"m#Z#dd	l$m%Z%m&Z&m'Z'dd
l(m)Z)m*Z*ddl+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1dd
l2m3Z3ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAddlBmCZCzddlDZDejEeDjDdejFdd���d�ZGeeHd<Wn$eIeJfy�zddlKZLeLjMjNjMZGWn
eIy�dd�ZGYnwYnwe�OeP�ZQdZRddiZSdZTdZUdZVdZWGdd�de�ZXdZYeeZeHd <gd!�Z[d"d#�Z\d$d%�Z]d&eZd'eZd(eeZfd)d*�Z^d+eZd(eZfd,d-�Z_e9d(eeZfd.d/��Z`e9d+eZd(eeZfd0d1��Zad~d(eZfd2d3�Zbd4d5�Zcd6d7�Zdd8d9�Zed(eeZfd:d;�Zfe�g��r�d<ZUefd=�Zhehdu�r�eQ�id>�d?ehZTneQ�id@�dZYeVdAeTidBdBdC�ZjdAdDdEgdBdF�ieUdGdH�gdI�ZkdJeRgZldKZmdLZnGdMdN�dNejo�ZpdOdP�ZqdQdR�ZrdSdT�ZsdUdV�ZtdWdX�ZuddYdZ�Zve9d[d\��Zwe9d]d^��Zxe9eTd_d_fd`eZdaeZdbeydceyfddde��Zze9d~dfdg��Z{e9dhdi��Z|djdk�Z}e9dldm��Z~e9eYfdndo��Ze9dpdq��Z�e9drds��Z�e9dte�dueyd(e�fdvdw��Z�e9d(e�fdxdy��Z�e9d~dzd{��Z�epZ�epej�ffgZ�d|d}�Z�dS)��N)�Enum)�Path)�	monotonic�sleep�time)�Any�Dict�List�Optional)�net�performance�sources�ssh_util�subp�util)�
EventScope�	EventType)�
device_driver)�NoDHCPLeaseError�NoDHCPLeaseInterfaceError�NoDHCPLeaseMissingDhclientError)�EphemeralDHCPv4�EphemeralIPv4Network)�events)�errors�identity�imds�kvp)�netlink)
�DEFAULT_WIRESERVER_ENDPOINT�NonAzureDataSource�	OvfEnvXml�azure_ds_reporter�azure_ds_telemetry_reporter�build_minimal_ovf�dhcp_log_cb�get_boot_telemetry�get_metadata_from_fabric�get_system_info�report_diagnostic_event�report_dmesg_to_kvp�report_failure_to_fabric)�UrlErrorz$6$�)�strlen)�salt�
blowfish_hashcCstd��)z�Raise when called so that importing this module doesn't throw
            ImportError when ds_detect() returns false. In this case, crypt
            and passlib are not needed.
            z/crypt and passlib not found, missing dependency)�ImportError)�_�r3�C/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceAzure.pyr0@s��Azure�instance-idziid-AZURE-NODEz/dev/disk/cloud/azure_resource�ext4z/var/lib/waagentz/dev/sr0c@s eZdZdZdZdZdZdZdS)�PPSType�None�PreprovisionedOSDisk�Running�Savable�UnknownN)�__name__�
__module__�__qualname__�NONE�OS_DISK�RUNNING�SAVABLE�UNKNOWNr3r3r3r4r8Wsr8z/sys/firmware/acpi/tables/OEM0�PLATFORM_ENTROPY_SOURCE)z"/etc/netplan/90-hotplug-azure.yamlz /usr/local/sbin/ephemeral_eth.shz+/etc/udev/rules.d/10-net-device-added.rulesz#/run/network/interfaces.ephemeral.dcCs�|��D]9}t�d|�r=|��}t|�dkr=|d�d�}t|�dkr=|ddkr=|d�|�r=|d�d�}|dSqd	S)
z�
    dev.storvsc.1.%pnpinfo:
        classid=32412632-86cb-44a2-9b5c-50d1417354f5
        deviceid=00000000-0001-8899-0000-000000000000
    �pnpinfo���=r�deviceid��.N)�
splitlines�re�search�split�len�
startswith)�
sysctl_outrK�line�fields�columns�compsr3r3r4�"find_storvscid_from_sysctl_pnpinfoks��rYcCs2|��D]}t�||�r|��}|dSqdS)z�
    scbus0 on ata0 bus 0
    scbus1 on ata1 bus 0
    scbus2 on blkvsc0 bus 0
    scbus3 on blkvsc1 bus 0
    scbus4 on storvsc2 bus 0
    scbus5 on storvsc3 bus 0
    scbus-1 on xpt0 bus 0
    rN)rNrOrPrQ)�camcontrol_out�disk_drvrU�itemsr3r3r4�find_busdev_from_disk�s�r]rZ�busdev�returncCsN|��D] }t�||�r$|�d�}t|�dkr$|d�d�}|dSqdS)z�
    <Msft Virtual CD/ROM 1.0>          at scbus1 target 0 lun 0 (cd0,pass0)
    <Msft Virtual Disk 1.0>            at scbus2 target 0 lun 0 (da0,pass1)
    <Msft Virtual Disk 1.0>            at scbus3 target 1 lun 0 (da1,pass2)
    �(rIrL�,rN)rNrOrPrQrR)rZr^rUr\�dev_passr3r3r4�find_dev_from_busdev�s
�rc�macc
CsZt|�dkr)d�|dd�|dd�|dd�|dd�|dd�|dd�g�}|��S)	z1Normalize mac address with colons and lower-case.��:rrI����
)rR�join�lower�rdr3r3r4�normalize_mac_address�s
>�rncCsdd�t��D�S)z-Get Hyper-V NICs as normalized MAC addresses.cSs$g|]}|ddkrt|d��qS)rI�	hv_netvscrL�rn)�.0�nr3r3r4�
<listcomp>�s

�z1get_hv_netvsc_macs_normalized.<locals>.<listcomp>)r�get_interfacesr3r3r3r4�get_hv_netvsc_macs_normalized�s�rucsf�fdd�t��D�}d|vrdSt|�dkr&td�|ftjd�|dStd�|ftjd�d	S)
z0Determine the device driver to match on, if any.cs$g|]}�t|d�kr|d�qS)rLrIrp�rq�irmr3r4rs�s
�z3determine_device_driver_for_mac.<locals>.<listcomp>rorLz4Assuming driver for interface with mac=%s drivers=%r��logger_funcrz=Unable to specify driver for interface with mac=%s drivers=%rN)rrtrRr)�LOG�debug�warning)rd�driversr3rmr4�determine_device_driver_for_mac�s(
�����r~c	Cs:zt�|�jWStjyt�dd�|��|YSw)NzFailed to execute: %s� )r�stdout�ProcessExecutionErrorrzr{rk)�cmd�fail_retr3r3r4�execute_or_debug�s�r�cCstddgdd�S)N�sysctlzdev.storvsc�)r��r�r3r3r3r4�get_dev_storvsc_sysctl��r�cCstgd��S)N)�
camcontrol�devlistz-br�r3r3r3r4�get_camcontrol_dev_bus��r�cCstddg�S)Nr�r�r�r3r3r3r4�get_camcontrol_dev�r�r�cCs�d}|dkrd}|d}dt|�}d�||�}t�}t||�}|s)t�d�dSt�}t�}d�|�}t||�}	|	rMt	||	�}
|
durKt�d	�dS|
Sd
�|�}t||�}	|	rkt	||	�}
|
durit�d	�dS|
SdS)N�00000000rL�00000001rI�000z{0}-{1}z#Fail to find storvsc id from sysctlz	blkvsc{0}zFail to find /dev/daXz
storvsc{0})
�str�formatr�rYrzr{r�r�r]rc)�port_id�g0�g1�g0g1rT�	storvscid�camcontrol_b_outrZ�blkvsc�scbusx�devname�storvscr3r3r4�get_resource_disk_on_freebsd�s<









r�zfreebsd-ufsrLzresource disk is not None�/dev/zresource disk is None�
ephemeral0T)�data_dir�disk_aliases�apply_network_config�&apply_network_config_for_secondary_ips�gpt�d)�
table_type�layout�	overwritezephemeral0.1)�
filesystem�device)�
disk_setup�fs_setup�
datasource�never_destroy_ntfs�REDACTEDcs<eZdZdZejejejhiZ	dZ
ejZ
dZdd�Zdeddf�fd	d
�Zdd�Zd
d�Zededefdd��Zeddddd�deededededef
dd��Zed{dd��Zdefdd�Zd{dd �Zed!d"��Zed#edefd$d%��Z d|�fd'd(�	Z!ed)d*��Z"ed+d,��Z#d-d.�Z$d/d0�Z%ede&efd1d2��Z'd3e(de&efd4d5�Z)de&efd6d7�Z*d8d9�Z+d:d;�Z,d}d<d=�Z-ed>d?��Z.e	Ad~dBedCede/fdDdE��Z0edFdG��Z1edddH�dIedJeddfdKdL��Z2edMdN��Z3ede4j4fdOdP��Z5edQdR��Z6ed{dSdT��Z7edUdV��Z8edWdX��Z9ede:fdYdZ��Z;e	dd[e<j=d\edefd]d^��Z>edd_�d`ee&edee&efdadb��Z?d3e(deefdcdd�Z@dee(d3e(deAfdfdg�ZBedhdi��ZCedje(d3e(dee&efdkdl��ZDdmdn�ZEedodp��ZFeGdqdr��ZHedsdt��ZIeGdudv��ZJeGdwdx��ZKed3e(defdydz��ZL�ZMS)��DataSourceAzurer5FrLcCs�tj�||||�tj�|jd�|_i|_d|_t	�
t	�|ti�t
g�|_d|_d|_d|_d|_d|_t|_tj�|jdd�|_dS)N�azureF�data�reported_ready)r
�
DataSource�__init__�os�pathrk�seed_dir�cfg�seedr�
mergemanydict�get_cfg_by_path�DS_CFG_PATH�BUILTIN_DS_CONFIG�ds_cfg�_iso_dev�_network_config�_ephemeral_dhcp_ctx�_route_configured_for_imds� _route_configured_for_wireserverr�_wireserver_endpoint�	cloud_dir�_reported_ready_marker_file)�self�sys_cfg�distro�pathsr3r3r4r�Ds �
�zDataSourceAzure.__init__�ci_pkl_versionr_NcsDt��|�d|_d|_d|_d|_t|_tj	�
|jjdd�|_
dS)NFr�r�)�super�	_unpickler�r�r�r�rr�r�r�rkr�r�r�)r�r���	__class__r3r4r�Vs

�zDataSourceAzure._unpicklecCstj�|�}d||jfS)Nz%s [seed=%s])r
r��__str__r�)r��rootr3r3r4r�bszDataSourceAzure.__str__cCsH|jdurd}n|j�d�rd}n|j��dkrd}nd}d||jfS)z/Return the subplatform metadata source details.N�unknownz/devzconfig-diskrzseed-dirz%s (%s))r�rSrl)r��subplatform_typer3r3r4�_get_subplatformfs
z DataSourceAzure._get_subplatform�ephipv4cCs<|jsdSdd�|jD�}d|v|_|j|v|_|jp|jS)NFcSsg|]}|d�d�d�qS)r�/)rQ)rq�rr3r3r4rsxsz5DataSourceAzure._check_if_primary.<locals>.<listcomp>z169.254.169.254)�
static_routesr�r�r�)r�r��routed_networksr3r3r4�_check_if_primaryrs
��z!DataSourceAzure._check_if_primaryT�)�iface�report_failure_if_not_primary�retry_sleep�timeout_minutesr�r�r�r�cCs�|jdur	td��td|t��ftjd�t|j|t	d�|_d}t
�}||d}tjddt
d	���|dur�z|j��}Wn�ty]td
tjd�|jtjt
�|d�dd
�Ynotyntdtjd�d|_�ty�td|tjd�|jtjt
�||d�dd
�Yn>ty�}ztd|tjd�WYd}~n(d}~wtjy�}ztd|j|j|j|jftjd�WYd}~nd}~ww|dur�t
�||kr�t|�nn|dus8|dur�d|_t��|d}||j_ d|vr�|d|_!t"|�}	|jj#}
|
du�r
td��|�$|
�}td|||	|
j%|
j&||j'|j(ftjd�|�r>|�s>|jtj)||	|
j%|
j&|d�dd
�|Wd�S1�sKwYdS)a�Setup ephemeral networking.

        Keep retrying DHCP up to specified number of minutes.  This does
        not kill dhclient, so the timeout in practice may be up to
        timeout_minutes + the system-configured timeout for dhclient.

        :param timeout_minutes: Number of minutes to keep retrying for.

        :raises NoDHCPLeaseError: If unable to obtain DHCP lease.

        :returns: True if NIC is determined to be primary.
        Nz/Bringing up networking when already configured.z2Bringing up ephemeral networking with iface=%s: %rrx)r��
dhcp_log_func�<zobtain-dhcp-leasezobtain dhcp lease��name�description�parentzInterface not found for DHCP)�durationT��	host_onlyzdhclient executable not foundz&Failed to obtain DHCP lease (iface=%s))r��	interfacezFile not found during DHCP %rz7Command failed: cmd=%r stderr=%r stdout=%r exit_code=%sr�zunknown-245zdhcp context missing ephipv4z{Obtained DHCP lease on interface %r (primary=%r driver=%r router=%r routes=%r lease=%r imds_routed=%r wireserver_routed=%r))r��driver�routerr��lease)*r��RuntimeErrorr)rrtrzr{rr�r%rr�ReportEventStackr"�obtain_leaserr|�_report_failurer�$ReportableErrorDhcpInterfaceNotFoundr�errorr�ReportableErrorDhcpLease�FileNotFoundErrorrr�r��stderrr��	exit_coderr�r�r�_ephipv4r�r�r�r�r��(ReportableErrorDhcpOnNonPrimaryInterface)r�r�r�r�r�r��
start_time�deadliner�r�r��primaryr3r3r4�_setup_ephemeral_networking�s�
�
���
���
���
�
��������
�:


��
���
&�z+DataSourceAzure._setup_ephemeral_networkingcCs.d|_d|_|jdur
dS|j��d|_dS)zTeardown ephemeral networking.FN)r�r�r��
clean_network�r�r3r3r4�_teardown_ephemeral_networkings


z.DataSourceAzure._teardown_ephemeral_networkingcCs|jdup
|jjduS)z"Check if networking is configured.N)r�r�rr3r3r4�_is_ephemeral_networking_up*s

�z+DataSourceAzure._is_ephemeral_networking_upc
Cs�zgd�}t�|�\}}td|||ftjd�WdStjye}z>t|jt�r8t�d�t	�
�}|�|�n"td|j|j
|j|jftjd�t	�|�}|�|�WYd}~dSWYd}~dSd}~ww)abCheck if azure-proxy-agent is ready for communication with WS/IMDS.

        If ProvisionGuestProxyAgent is true, query azure-proxy-agent status,
        waiting up to 120 seconds for the proxy to negotiate with Wireserver
        and configure an eBPF proxy.  Once azure-proxy-agent is ready,
        it will exit with code 0 and cloud-init can then expect to be able to
        communicate with these services.

        Fail deployment if azure-proxy-agent is not found or otherwise returns
        an error.

        For more information, check out:
        https://github.com/azure/guestproxyagent
        )zazure-proxy-agentz--statusz--wait�120z1Executing %s resulted in stderr=%r with stdout=%rrxzGFailed to activate Azure Guest Proxy Agent: azure-proxy-agent not foundzgFailed to activate Azure Guest Proxy Agent: status check failed cmd=%r stderr=%r stdout=%r exit_code=%sN)rr)rzr{r��
isinstance�reasonr�r�r�!ReportableErrorProxyAgentNotFoundr�r�r�r�r��&ReportableErrorProxyAgentStatusFailure)r�r��out�errr��report_error�reportable_errorr3r3r4�_check_azure_proxy_agent_status1s@�����	�
����z/DataSourceAzure._check_azure_proxy_agent_statusc
Cs�i}|jd}d}ddi}ddddiii}d}i}t|j|�D]`}z:|�d�rFt��r8tj|td	d
�\}}}}n
t�|t�\}}}}||_nt|�\}}}}|}t	d|t
jd�Wn-tymt	d
|t
jd�Yqtj
yt	d|t
jd�Yqwd}	t	|	t
jd�t|j�p�|du}
|
r�dnd}z|j|d�Wn	ty�Ynwi}|��r�|�d�r�|��|jdd�}|s�|dur�d}	t	|	�t�|	��|�||�}
|
tjk�rVt��r�d}	t	|	t
jd�t�|	��|���sd}	t	|	t
jd�t�|	��|
tjk�r|��n|
tjk�r|��n|
tj k�r"|�!�n|�"�|�#�\}}}}|�d��r8|��|jdd�}|�$|�}|dtjj%fv�rV|�&t'j(d|d��|j)|d�|�p`d|_*|�+||t�,|d|ig�|d��t-|�}t.|�}t/|�}|�r�t
�d|�||ddd<|�r�t
�d |�||d!d<|du�r�t
�d"|�||d#d$<|j*dk�r�|d%�s�zt0|||d&�}d'|i|d%<Wnt1�y�}zt	d(|t
jd�WYd}~nd}~ww|�st2|�}|�rt
�d)�zt3�4d�5|�6���|d*<Wnt1�yt	d+t
jd�Ynw||k�r%t	d,|t
jd�t7�}|�r1||d!d-<|�8�|d!d.<|j9d/u�rr|���rr|j:||d0�}z|j;|d1�}Wnt1�y^Y|Swt
�d2|�|�rn||d!d3<|�<�|S)4aWalk all instance metadata sources returning a dict on success.

        @return: A dictionary of any metadata content for this instance.
        @raise: InvalidMetaDataException when the expected metadata service is
            unavailable, broken or disabled.
        r�N�local-hostnamer��system_info�default_userr�r��udf)�mtypez!Found provisioning metadata in %srxz$Did not find Azure data source in %sz%s was not mountablez�Unable to find provisioning media, falling back to IMDS metadata. Be aware that IMDS metadata does not support admin passwords or custom-data (user-data only).�r��r��ProvisionGuestProxyAgentT)�report_failurezNo OVF or IMDS availablez%Free BSD is not supported for PPS VMszDHCP failed while in source PPSzextended.compute.ppsType)�key�value)�imds_md�IMDSr)r��files�metadata�userdata_rawz Username retrieved from IMDS: %sz Hostname retrieved from IMDS: %srz(Disable password retrieved from IMDS: %sr��
ssh_pwauthr)�username�hostname�
disableSshPwd�ovf-env.xmlz)Failed to construct OVF from IMDS data %szRetrieved userdata from IMDSrzBad userdata in IMDSzusing files cached in %s�random_seedr6F)r�r��pubkey_infoznegotiating returned %s�public-keys)=r��list_possible_azure_dsr�rSr�
is_FreeBSD�mount_cb�load_azure_ds_dirr�r)rzr{r �MountFailedErrorr|�boolr�rr�getr�get_metadata_from_imdsr
�InvalidMetaDataException�_determine_pps_typer8rAr�rC�_wait_for_pps_running_reuserD�_wait_for_pps_savable_reuserB�_wait_for_pps_os_disk_shutdown�_wait_for_pps_unknown_reuse�_reprovision�_ppstype_from_imdsrr�r�"ReportableErrorImdsInvalidMetadata�validate_imds_network_metadatar��updater��_username_from_imds�_hostname_from_imds�_disable_password_from_imdsr$�	Exception�_userdata_from_imds�base64�	b64decoderkrQ�_get_random_seed�_iid�_negotiated�!_determine_wireserver_pubkey_info�
_report_ready�_cleanup_markers)r��crawled_data�ddir�
ovf_source�mdr�rr�src�msg�requires_imds_metadatar�r�pps_type�imds_ppstype�
imds_username�
imds_hostname�imds_disable_password�contents�e�
imds_userdatar�r$�ssh_keysr3r3r4�crawl_metadatags>

����
����








����
�����
�
��

���zDataSourceAzure.crawl_metadatarc	
Cs�t�}|d}|js
d}nd}d}d}ztj||d�WStyI}z"t|�}t�|}tj||d�}|js?t|j	t
j�r?d}WYd}~n d}~wtyd}zt|�}tj
|d�}WYd}~nd}~ww|j||d�td|tjd	�iS)
Ni,�)�max_connection_errors�retry_deadline)�	exceptionr�F)rZr�z!Ignoring IMDS metadata due to: %srx)rr�r� fetch_metadata_with_api_fallbackr,r�r�ReportableErrorImdsUrlErrorr�cause�requests�ConnectionError�
ValueError�+ReportableErrorImdsMetadataParsingExceptionr�r)rzr|)	r�rr�rYrX�error_string�error_reportr�r�r3r3r4r-?sH�
�������z&DataSourceAzure.get_metadata_from_imdsr3cstt|��|�tj|_dS)z.Reset any cached class attributes to defaults.N)r�r��clear_cached_attrsr
�UNSET�_metadata_imds)r��
attr_defaultsr�r3r4rdmsz"DataSourceAzure.clear_cached_attrscCs4tj��}|durdS|jdurdSt|jd���S)zQCheck platform environment to report if this datasource may
        run.
        NTFr!)r�ChassisAssetTag�query_systemr�r�exists)r��chassis_tagr3r3r4�	ds_detectrs

zDataSourceAzure.ds_detectc
Cs�zt�Wnty}zt�d|�WYd}~nd}~wwzt�Wnty;}zt�d|�WYd}~nd}~wwzLz|��}Wn?tjya}z|�|�WYd}~W|�	�dSd}~wty�}zt�
|�}|�|�WYd}~W|�	�dSd}~wwW|�	�n|�	�w|jr�|jjdkr�|j
�d�r�t�t}tj�|�r�td|tjd�t�|d	tg�|_ntd
|tjd�|d	|_|dd|_t�|dtg�|_|d
|_t|j
d|ddd�dS)z�Crawl and process datasource metadata caching metadata as attrs.

        @return: True on success, False on error, invalid or disabled
            datasource.
        z Failed to get boot telemetry: %sNz$Failed to get system information: %sF�ubuntur�zXEphemeral resource disk '%s' exists. Merging default Azure cloud ephemeral disk configs.rxr�zdEphemeral resource disk '%s' does not exist. Not merging default Azure cloud ephemeral disk configs.rrrr�ri�)�dirmodeT)r&r<rzr|r(rVr�ReportableErrorr�r�!ReportableErrorUnhandledExceptionr�r�r�r,�*maybe_remove_ubuntu_network_config_scripts�RESOURCE_DISK_PATHr�r�rjr)r{rr��#BUILTIN_CLOUD_EPHEMERAL_DISK_CONFIGr�rf�DEFAULT_METADATArr�write_files)r�rSrFr�r�devpathr3r3r4�	_get_data�sz
��
��
��

���	�
���
���

�
�zDataSourceAzure._get_datacCs&|jrd|jvr|��St|jd�S)Nr6)rrAr�rr3r3r4�get_instance_id�szDataSourceAzure.get_instance_idcCs|jd�|�S)Nr�)r�r,)r�r�r3r3r4�device_name_to_device�r�z%DataSourceAzure.device_name_to_devicec	Cs0z	|�|jd�WSttfyY|��Sw)z+
        Retrieve public SSH keys.
        r)�_get_public_keys_from_imdsr�KeyErrorr`�_get_public_keys_from_ovfrr3r3r4�get_public_ssh_keys�s�z#DataSourceAzure.get_public_ssh_keysrcCs�z
dd�|ddD�}Wntyd}t|tjd��wtdd�|D��r5d	}t|tjd�t|��d
�t|��}t|tjd�|S)z�Get SSH keys from IMDS metadata.

        :raises KeyError: if IMDS metadata is malformed/missing.
        :raises ValueError: if key format is not supported.

        :returns: List of keys.
        cS�g|]}|d�qS)�keyDatar3)rq�
public_keyr3r3r4rs�s��z>DataSourceAzure._get_public_keys_from_imds.<locals>.<listcomp>�compute�
publicKeysz"No SSH keys found in IMDS metadatarxcss�|]	}t|d�VqdS))rN)�_key_is_openssh_formatted)rqrr3r3r4�	<genexpr>�s�z=DataSourceAzure._get_public_keys_from_imds.<locals>.<genexpr>zKey(s) not in OpenSSH formatzRetrieved {} keys from IMDS)r{r)rzr{�anyr`r�rR)r�rrU�log_msgr3r3r4rz�s 

��z*DataSourceAzure._get_public_keys_from_imdscCsXg}z|jd}d�t|��}t|tjd�W|Sty+d}t|tjd�Y|Sw)zYGet SSH keys that were fetched from wireserver.

        :returns: List of keys.
        r%zRetrieved {} keys from OVFrxzNo keys available from OVF)rr�rRr)rzr{r{)r�rUr�r3r3r4r|�s
��z)DataSourceAzure._get_public_keys_from_ovfcCs|jS�N�r�rr3r3r4�get_config_obj	szDataSourceAzure.get_config_objcCst�|���Sr�)r
�instance_id_matches_system_uuidrx)r�r�r3r3r4�check_instance_idsz!DataSourceAzure.check_instance_idcCsZtj�|j�d�d�}t��}tj�|�r+t�	|��
�}t�|�}|��||fvr+|S|S)Nr�r6)
r�r�rkr��	get_cpathr�query_system_uuidrjr�load_text_file�strip�byte_swap_system_uuidrl)r��previous�
prev_iid_path�system_uuid�
swapped_idr3r3r4rAs�
zDataSourceAzure._iidc
Cs�z;d}tjddtd��
t�|�}Wd�n1swY|dur0d}t|tjd�WdStd|tjd�WdSt	yQ}z
tt
|�tjd��d}~ww)z�Use the netlink socket provided to wait for nic detach event.
        NOTE: The function doesn't close the socket. The caller owns closing
        the socket and disposing it safely.
        Nzwait-for-nic-detachzwait for nic detachr�zHPreprovisioned nic not detached as expected. Proceeding without failing.rxz%The preprovisioned nic %s is detached)rr�r"r�wait_for_nic_detach_eventr)rzr|r{�AssertionErrorr�r�)r��nl_sock�ifnamerKr�r3r3r4�_wait_for_nic_detach!s,������z$DataSourceAzure._wait_for_nic_detachr�皙�����?r��retriescCsft|�D]}|jj�|�rtd|tjd�dS|d|kr#t|�qtd|||ftjd�dS)NzThe link %s is up.rxrLz;The link %s is not up after %f seconds, continuing anyways.)�ranger��
networking�try_set_link_upr)rz�infor)r�r�r�r�rwr3r3r4�wait_for_link_upAs
��
�
�z DataSourceAzure.wait_for_link_upcCs@|j}t�d|�t�|djt��t�d��t	dtj
d�dS)Nz*Creating a marker file to report ready: %sz{pid}: {time}
)�pidrzRSuccessfully created reported ready marker file while in the preprovisioning pool.rx)r�rzr�r�
write_filer�r��getpidrr)r{)r�r�r3r3r4�_create_report_ready_markerUs�
�z+DataSourceAzure._create_report_ready_marker)�
create_marker�expect_url_errorr�r�c
Cs�z|��Wn3ty9}z'|r t|t�r tdtjd�d|_nd}t|tjd�t	�
|�|�WYd}~nd}~wwd|_|rE|��dSdS)z�Report ready for PPS, creating the marker file upon completion.

        :raises sources.InvalidMetaDataException: On error reporting ready.
        z,Ignoring http call failure, it was expected.rxNz9Failed reporting ready while in the preprovisioning pool.F)
rDr<rr,r)rzr{r�r�r
r.rBr�)r�r�r�r�rKr3r3r4�_report_ready_for_ppsbs(������z%DataSourceAzure._report_ready_for_ppsc
Cs�t�d�z[g}d}	d}tjddt|�td��t�||�}Wd�n1s*wY|�|�t	d|tjd	�|�
|�|sRt�d
|�|j|ddd�}|r\t�d
�WdS|��qt
y|}zt	t|�tjd	�WYd}~dSd}~ww)z6Wait until the primary nic for the vm is hot-attached.z*Waiting for primary nic to be hot-attachedFTNzwait-for-nic-attachz4wait for nic attach after %d nics have been attachedr�zDetected nic %s attached.rxz!Checking if %s is the primary nicr)r�r�r�zFound primary nic for this VM.)rzr�rr�rRr"r�wait_for_nic_attach_event�appendr)r�r�rr�r�r�)r�r��
nics_found�primary_nic_foundr�r�r3r3r4�"_wait_for_hot_attached_primary_nic�sL
����


�
�
�* ��z2DataSourceAzure._wait_for_hot_attached_primary_nicc
Cs<zt��WStjy}ztd|��tjd��d}~ww)Nz!Failed to create netlink socket: rx)r�create_bound_netlink_socket�NetlinkCreateSocketErrorr)rzr�)r�r�r3r3r4�_create_bound_netlink_socket�s
���z,DataSourceAzure._create_bound_netlink_socketcCs*|jdd�tdtjd�td�t���)z4Report ready and wait for host to initiate shutdown.F)r�z"Waiting for host to shutdown VM...rxi�3�)r�r)rzr�rr�ReportableErrorOsDiskPpsFailurerr3r3r4r2�s�z.DataSourceAzure._wait_for_pps_os_disk_shutdowncCs�|��}z_|jdus|jjdurtd��|jj}|��t�d|�tjddt	d��,zt
�||�WntyN}zt
d|tjd�WYd}~nd}~wwWd�n1sYwYW|��n|��w|��dS)	z9Report ready and wait for nic link to switch upon re-use.Nzmissing ephemeral contextz#Wait for vnetswitch to happen on %sz!wait-for-media-disconnect-connectzwait for vnet switchr�z'Error while waiting for vnet switch: %srx)r�r�r�r�r�rzr{rr�r"r�!wait_for_media_disconnect_connectr�r)r��closer)r�r�r�rSr3r3r4r0�s<
��������
z+DataSourceAzure._wait_for_pps_running_reusec
Cs�|��}z=|jdd�z|��Wntjy0}ztd|tjd�d|_WYd}~nd}~ww|�	|�|�
|�W|��dS|��w)z@Report ready and wait for nic(s) to be hot-attached upon re-use.T)r�zLIgnoring failure while tearing down networking, NIC was likely unplugged: %rrxN)r�r�rrr�r)rzr�r�r�r�r�)r�r�rSr3r3r4r1�s$����
z+DataSourceAzure._wait_for_pps_savable_reusecCs&tj�|j�r	dS|��|��dS)z0Report ready if needed for unknown/recovery PPS.N)r�r��isfiler�r�rrr3r3r4r3sz+DataSourceAzure._wait_for_pps_unknown_reusec	Cs�d}d}|sT|��s |d7}z|jdd�Wn	tyYqwtjddtd��"zt��}WntyB|�	�YWd�qwWd�n1sMwY|rt
d	|tjd
�|S)z0Poll IMDs for reprovisiondata XML document data.rNrLr�rzget-reprovision-data-from-imdszget reprovision data from imdsr�z#attempted dhcp %d times after reuserx)
rr�rrr�r"r�fetch_reprovision_datar,rr)rzr{)r��
dhcp_attempts�reprovision_datar3r3r4�
_poll_imds s<�������zDataSourceAzure._poll_imdsr�r�c
Cs&td|����tjd�t�t�|�}|r|S|��rLztdtjd�t	|j
|d�d|_WdStyK}ztd|tjd�WYd}~nd}~wwz*tdtjd�|�
�z|jd	d
�Wn	tyiYnwt	|j
|d�d|_WdSty�}ztd|tjd�WYd}~dSd}~ww)
a�Report failure to Azure host and fabric.

        For errors that may be recoverable (e.g. DHCP), host_only provides a
        mechanism to report the failure that can be updated later with success.
        DHCP will not be attempted if host_only=True and networking is down.

        @param error: Error to report.
        @param host_only: Only report to host (error may be recoverable).
        @return: The success status of sending the failure signal.
        z#Azure datasource failure occurred: rxz>Using cached ephemeral dhcp context to report failure to Azure)�endpointr�Tz@Failed to report failure using cached ephemeral dhcp context: %sNz3Using new ephemeral dhcp to report failure to Azurerrz5Failed to report failure using new ephemeral dhcp: %sF)r)�as_encoded_reportrzr�r*r�report_failure_to_hostrr{r+r�rBr<rr�r)r�r�r��reportedrSr3r3r4r�>sh�
������������zDataSourceAzure._report_failurer#r$c
Csft�t��z
t|j|j|j|d�}Wnty*}z
td|t	j
d��d}~wwd|_d|_|S)z�Tells the fabric provisioning has completed.

        :param pubkey_info: Fingerprints of keys to request from Wireserver.

        :raises Exception: if failed to report.

        :returns: List of SSH keys, if requested.
        )r�r��iso_devr$zQError communicating with Azure fabric; You may experience connectivity issues: %srxNT)r*r�report_success_to_hostr'r�r�r�r<r)rzr|rB)r�r$r�rSr3r3r4rD�s,
�����	zDataSourceAzure._report_readyc
CsLz	|dddWSty%}ztd|tjd�WYd}~dSd}~ww)N�extendedr��ppsTypez2Could not retrieve pps configuration from IMDS: %srx)r<r)rzr{)r�rrSr3r3r4r5�s���z"DataSourceAzure._ppstype_from_imds�ovf_cfgcCs�tj�|j�rtj}nO|�dd�tjjks|�	|�tjjkr"tj}n8|�dd�tj
jks5|�	|�tj
jkr9tj
}n!|�d�dusS|�dd�tjjksS|�	|�tjjkrWtj}ntj}t
d|jtjd�|S)z@Determine PPS type using OVF, IMDS data, and reprovision marker.�PreprovisionedVMTypeN�PreprovisionedVmTzPPS type: %srx)r�r�r�r�r8rEr,rDrr5rBrCrAr)rzr�)r�r�rrMr3r3r4r/�s&
��z#DataSourceAzure._determine_pps_typecCsZ|��}tjddtd��t|�\}}}|||d|ifWd�S1s&wYdS)zrInitiate the reprovisioning workflow.

        Ephemeral networking is up upon successful reprovisioning.
        zreprovisioning-read-azure-ovfz$read azure ovf during reprovisioningr�r!N)r�rr�r"�read_azure_ovf)r�rRrI�udr�r3r3r4r4�s�$�zDataSourceAzure._reprovisionr�c	Csbd}z|�|�W|Sttfy0|�dd�}d�|dur#t|�nd�}t|tjd�Y|Sw)z�Determine the fingerprints we need to retrieve from Wireserver.

        :return: List of keys to request from Wireserver, if any, else None.
        N�_pubkeysz"Retrieved {} fingerprints from OVFrrx)	rzr{r`r,r�rRr)rzr{)r�r�rr$r�r3r3r4rC�s���z1DataSourceAzure._determine_wireserver_pubkey_infocCst�|j�dS)zCleanup any marker files.N)r�del_filer�rr3r3r4rE�sz DataSourceAzure._cleanup_markerscCs8|j��}zt|||j�td�d�Wt�dSt�w)NF)�is_new_instance�
preserve_ntfs)r��
get_ipath_cur�address_ephemeral_resizer�r,�DS_CFG_KEY_PRESERVE_NTFSr*)r�r�r��instance_dirr3r3r4�activate�s
��zDataSourceAzure.activatecC�|j�di��di��d�S)Nrr��platformFaultDomain�rr,rr3r3r4�availability_zone�s�z!DataSourceAzure.availability_zonec
Cs�|jr8|jtjkr8|j�d�r8zt|jd|j�d�d�WSty7}zt�dt	|��WYd}~nd}~wwzt
�WStyW}zt�dt	|��WYd}~iSd}~ww)z:Generate network configuration according to configuration.r��networkr�)r�z?Failed generating network config from IMDS network metadata: %sNz-Failed generating fallback network config: %s)rfr
rer�r,�6generate_network_config_from_instance_network_metadatar<rzr�r��-_generate_network_config_from_fallback_config)r�rSr3r3r4�_generate_network_configs4�
��������z(DataSourceAzure._generate_network_configcCs(|jr|jtjkr|jS|��|_|jS)z,Provide network configuration v2 dictionary.)r�r
rer�rr3r3r4�network_config$s
zDataSourceAzure.network_configcCr�)Nrr��locationr�rr3r3r4�region.szDataSourceAzure.regioncs�t�}z|d}dd�|dD��Wnty(td|�d�tjd�YdSw�fdd�|D�}|s6d	Std
||ftjd�|jrH|jjsJdSt�	|jj�}|rXt
|t�sZdSt|�}||vrmtd||ftjd�dS)z=Validate IMDS network config and report telemetry for errors.r�cSsg|]}t|d��qS)�
macAddressrprvr3r3r4rs9s
��zBDataSourceAzure.validate_imds_network_metadata.<locals>.<listcomp>r�z6IMDS network metadata has incomplete configuration: %rrxFcsg|]}|�vr|�qSr3r3)rq�m��	imds_macsr3r4rsEsTz>IMDS network metadata is missing configuration for NICs %r: %rz3IMDS network metadata is missing primary NIC %r: %r)
rur{r)r,rzr|r�r�r�get_interface_macrr�rn)r�r�
local_macsr��missing_macs�primary_macr3r�r4r72sL
��������z.DataSourceAzure.validate_imds_network_metadata)r_N)r3r�)r�r�)F)Nr>r?r@�dsnamer�NETWORKr�BOOT_NEW_INSTANCE�BOOT�default_update_eventsrBr
rerf�_ci_pkl_versionr��intr�r�r�r#rr+r�r
r�r�rrrrVrr-rdrlrwrxryr	r}�dictrzr|r�r�rAr��floatr�r�r�r��socketr�r2r0r1r3�bytesr�rror�rDr5r8r/r4rCrEr��propertyr�r�r�r�r7�
__classcell__r3r3r�r4r�8s��������

6
X-

H

����
����&
8

$

����A�
�
�"

��
�



	
r�cC�(z	|dddWStyYdSw)Nr��	osProfile�
adminUsername�r{��	imds_datar3r3r4r9c�
�r9cCs$z|ddWStyYdSw)Nr��userDatar�r�r3r3r4r=js
�r=cCr�)Nr�r��computerNamer�r�r3r3r4r:qr�r:cCs,z|ddddkWStyYdSw)Nr�r��disablePasswordAuthentication�truer�r�r3r3r4r;xs���r;cCsFd|��vrdSt��}z|�|�}Wn
tyYdSw|jduS)z?
    Validate whether or not the key is OpenSSH-formatted.
    z
FN)r�r�AuthKeyLineParser�parse�	TypeError�keytype)r�parser�aklr3r3r4r��s�
r�cCs`dD]+}g}td|�D]}||t|�}tj�|�r&|�|tj�|�f�q|r-|SqgS)N)z-part�pr�rL)r�r�r�r�rjr��realpath)rv�maxnum�suff�found�pnum�ppathr3r3r4�_partitions_on_device�s��rcCs*tjddd�}t�d|�tj�|�|vS)Nz	TYPE=ntfsT)�no_cachezntfs_devices found = %s)r�find_devs_withrzr{r�r�r)rv�ntfs_devicesr3r3r4�_has_ntfs_filesystem�sr
cCs|rdd�t�tf}d|fStj�|�sdd|fSt�d|tj�|��t	|�}|s2dd|fSt
|�}|dkrLd|d	�d
d�|D��f}d|fS|dkrW|d\}}n|d
\}}t|�sld|||f}d|fStdd��}d|||f}t
jddtd��y}	ztj||dddidd�}
Wn@tjy�}z3d|	_dt|�vr�d|dfWYd}~Wd�Sd|d||ffWYd}~Wd�Sd}~ww|
d
kr�d|
|	_t�dd�t�t�d|d |
fWd�SWd�n1s�wYd|d!fS)"a�Determine if the ephemeral drive at devpath should be reformatted.

    A fresh ephemeral disk is formatted by Azure and will:
      a.) have a partition table (dos or gpt)
      b.) have 1 partition that is ntfs formatted, or
          have 2 partitions with the second partition ntfs formatted.
          (larger instances with >2TB ephemeral disk have gpt, and will
           have a microsoft reserved partition as part 1.  LP: #1686514)
      c.) the ntfs partition will have no files other than possibly
          'dataloss_warning_readme.txt'

    User can indicate that NTFS should never be destroyed by setting
    DS_CFG_KEY_PRESERVE_NTFS in dscfg.
    If data is found on NTFS, user is warned to set DS_CFG_KEY_PRESERVE_NTFS
    to make sure cloud-init does not accidentally wipe their data.
    If cloud-init cannot mount the disk to check for data, destruction
    will be allowed, unless the dscfg key is set.z:config says to never destroy NTFS (%s.%s), skipping checksrMFzdevice %s does not existzResolving realpath of %s -> %szdevice %s was not partitionedrIz&device %s had 3 or more partitions: %srcSr~)rLr3)rqr�r3r3r4rs�sz*can_dev_be_reformatted.<locals>.<listcomp>rLrz5partition %s (%s) on device %s was not ntfs formattedcs(tddg��t�fdd�t�|�D��S)Nzdataloss_warning_readme.txtzsystem volume informationcsg|]
}|���vr|�qSr3)rl)rq�f��ignoredr3r4rs�sz?can_dev_be_reformatted.<locals>.count_files.<locals>.<listcomp>)�setrRr��listdir)�mpr3rr4�count_files�s�z+can_dev_be_reformatted.<locals>.count_filesz1partition %s (%s) on device %s was ntfs formattedzmount-ntfs-and-countr��ntfs�LANG�C)r�update_env_for_mount�	log_errorzcannot mount ntfszunknown filesystem type 'ntfs'Tz^ but this system cannot mount NTFS, assuming there are no important files. Formatting allowed.Nz but mount of %s failed: %szmounted and counted %d fileszxit looks like you're using NTFS on the ephemeral disk, to ensure that filesystem does not get wiped, set %s.%s in configz but had %d files on it.z3 and had no important files. Safe for reformatting.)rkr�r�r�r�rjrzr{rrrRr
r#rr�r"rr(r*r�r�r|)rvr�rK�
partitions�
partition_len�	cand_part�	cand_pathr�bmsg�evt�
file_countrSr3r3r4�can_dev_be_reformatted�s�����
��
�����

���%rFr�rvr�r�c
Cstj�|�std|tjd�dStd|tjd�d}d}|r%d\}}nt||�\}}t�d||�|s7dSdD]E}tj�|dd	|�}d
||f}tj�|�rxz
t�|�t�d|�Wq9t	yw}	z
t�
d||	�WYd}	~	q9d}	~	wwt�d
|�q9dS)Nz,Ephemeral resource disk '%s' does not exist.rxz$Ephemeral resource disk '%s' exists.F)TzFirst instance boot.zreformattable=%s: %s)r��mounts�sem�config_zMarker "%s" for module "%s"z%s removed.z%s: remove failed! (%s)z%s did not exist.)r�r�rjr)rzr{rrk�unlinkr�r|)
r�rvr�r��resultrK�mod�sempathrrSr3r3r4r�s>��

��r�cCsjdd�}|sdS|si}t�||�|��D]\}}tj�||�}d|vr*|||�}tj||dd�qdS)NcSsbzt�|�}|��D]}d|jvr|jtkrt|_q
t�|�WSty0t�	d|�|YSw)z>Azure provides the UserPassword in plain text. So we redact it�UserPasswordz#failed to redact userpassword in %s)
�ET�
fromstring�iter�tag�text�DEF_PASSWD_REDACTION�tostringr<rz�critical)�cnt�fnamer��elemr3r3r4�_redact_passwordFs


��z%write_files.<locals>._redact_passwordr!i�)�filename�content�mode)r�
ensure_dirr\r�r�rkr�)�datadirrrnr2r�r4r0r3r3r4ruDs
�rucCst�|�}i}i}|jp
d}|jr|j|d<|jr|j|d<|jdur*|j|d<n|jr1d|d<i}|jr;|j|d<|jrNd|d	<t|jkrNt	|j�|d
<|rVd|i|d<|j
|d
<td|j
tj
d�|j|d<td|jtj
d�|j|d<td|jtj
d�|||fS)z�Parse OVF XML contents.

    :return: Tuple of metadata, configuration, userdata dicts.

    :raises NonAzureDataSource: if XML is not in Azure's format.
    :raises errors.ReportableError: if XML is unparsable or invalid.
    r�r
r�NrTr�F�lock_passwd�
hashed_passwdrrr�zPreprovisionedVm: %srxr�zPreprovisionedVMType: %srzProvisionGuestProxyAgent: %s)r!�
parse_text�custom_datar�public_keys�disable_ssh_password_auth�passwordrr,�encrypt_pass�preprovisioned_vmr)rzr��preprovisioned_vm_type�provision_guest_proxy_agent)rR�ovf_envrIr�r��defuserr3r3r4r�asJ
	






�
�
�
r�cCst|�Sr�)r0)r>r3r3r4r?�sr?cCs`zt|��}|�d�	Wd�WdS1swYWdSty/t�d|�YdSw)z;Return boolean indicating path to cdrom device has content.iNTzcdrom (%s) is not configuredF)�open�read�IOErrorrzr{)�	cdrom_dev�fpr3r3r4�_check_freebsd_cdrom�s

$���rJcCs(|durdStj|dd�}t�|���S)zIReturn content random seed file if available, otherwise,
    return None.NT)�quiet)r�load_binary_filer>�	b64encode�decode)�sourcer�r3r3r4r@�s
r@ccsZ�|VtVt��rd}t|�r|VndD]}t�d|�EdHq|r+|VdSdS)Nz/dev/cd0)�iso9660rzTYPE=%s)�DEFAULT_PROVISIONING_ISO_DEVrr'rJr)r��	cache_dirrH�fstyper3r3r4r&�s��
�r&c	Cs�tj�|d�}tj�|�std��t�d��!t|d��}|��}Wd�n1s+wYWd�n1s:wYt	|�\}}}|||d|ifS)Nr!zNo ovf-env file foundzReading ovf-env.xml�rb)
r�r�rkr�r r�TimedrErFr�)�
source_dir�ovf_filerIrRrIr�r�r3r3r4r)�s
��r)�network_metadatar�c	Cs�did�}t|d�D]�\}}d}dj|d�}d|dd	i}|d
kr'd|d<d|dd
�}dD]\}	|�|	i��dg�}
|
sEt�d|	|�q/d}|	dkrNd}nd}|
rZd|d<||d<|s]q/|
dd�D]'}||	dd
�d|�}
|d}|�d�s~g|d<|d�dj||
d��qcq/|r�|r�t|d�}|�d|��i|d��t	|�}|r�||d d!<||d"|<qt�d#|||�q|S)$z�Convert imds network metadata dictionary to network v2 configuration.

    :param: network_metadata: Dict of "network" key from instance metadata.

    :return: Dictionary containing network version 2 standard configuration.
    rI)�version�	ethernetsr�Fzeth{idx})�idxzroute-metricrLr�rzuse-dnsT)�dhcp4zdhcp4-overrides�dhcp6)�ipv4�ipv6�	ipAddresszNo %s addresses found for: %rr^�24�128r]zdhcp6-overridesN�subnet�prefix�privateIpAddress�	addressesz
{ip}/{prefix})�iprdr��
macaddress)�matchzset-namerir�rZz<No configuration for: %s (dev_config=%r) (has_ip_address=%r))
�	enumerater�r,rzr{r�rnr8rlr~)rXr��	netconfigr[�intf�has_ip_address�nicname�
dhcp_override�
dev_config�	addr_typerf�default_prefix�addr�	netPrefix�	privateIprdr�r3r3r4r��sj
��
����r�cCstjdd�}|duriS|S)ztGenerate fallback network config.

    @return: Dictionary containing network version 2 standard configuration.
    T)�
config_driverN)r�generate_fallback_configr�r3r3r4r�,sr�cCsh|st}d}|D])}tj�|�r1|s t�dtjjtj	jg�d}tj�
|�r,t�|�qt�
|�qdS)a(Remove Azure-specific ubuntu network config for non-primary nics.

    @param paths: List of networking scripts or directories to remove when
        present.

    In certain supported ubuntu images, static udev rules or netplan yaml
    config is delivered in the base ubuntu image to support dhcp on any
    additional interfaces which get attached by a customer at some point
    after initial boot. Since the Azure datasource can now regenerate
    network configuration as metadata reports these new devices, we no longer
    want the udev rules or netplan's 90-hotplug-azure.yaml to configure
    networking on eth1 or greater as it might collide with cloud-init's
    configuration.

    Remove the any existing extended network scripts if the datasource is
    enabled to write network per-boot.
    Fz|Removing Ubuntu extended network scripts because cloud-init updates Azure network configuration on the following events: %s.TN)�UBUNTU_EXTENDED_NETWORK_SCRIPTSr�r�rjrzr�rr�r�BOOT_LEGACY�isdirr�del_dirr�)r��loggedr�r3r3r4rq8s �
��rqcCst�|t�Sr�)r
�list_from_depends�datasources)�dependsr3r3r4�get_datasource_listhr�r�r�)r-)�r>�	functools�loggingr��os.pathrOr��xml.etree.ElementTree�etree�ElementTreer'�enumr�pathlibrrrr�typingrrr	r
r^�	cloudinitrrr
rrr�cloudinit.eventrr�
cloudinit.netr�cloudinit.net.dhcprrr�cloudinit.net.ephemeralrr�cloudinit.reportingr�cloudinit.sources.azurerrrr�cloudinit.sources.helpersr�cloudinit.sources.helpers.azurerr r!r"r#r$r%r&r'r(r)r*r+�cloudinit.url_helperr,�crypt�partial�rand_strr0�__annotations__r1�AttributeError�passlib.hash�passlib�hash�sha512_crypt�	getLoggerr>rz�DS_NAMErtrr�
DEFAULT_FS�AGENT_SEED_DIRrQr8rFr�rxrYr]rcrnrur~r�r�r�r�r�r'�res_diskr{r�rsr�r�r,r�r�r9r=r:r;r�rr
rr+r�rur�r?rJr@r&r)r�r�r�rq�DataSourceAzureNet�DEP_FILESYSTEMr~r�r3r3r3r4�<module>s&
 <����

	
+



�	��
�5



p�����+
7



���P&
�

Youez - 2016 - github.com/yon3zu
LinuXploit