text:
/************************************************************/
/*    NAME: Damian Manda                                    */
/*    ORGN: UNH                                             */
/*    FILE: CourseKeepMRAS.h                                */
/*    DATE: 2015-01-15                                      */
/************************************************************/

#ifndef CourseKeepMRAS_HEADER
#define CourseKeepMRAS_HEADER

#include "SignalFilter.h"
#include <deque>

class CourseKeepMRAS
{
public:
    CourseKeepMRAS();
    ~CourseKeepMRAS() {}

    double Run(double dfDesiredHeading, double dfMeasuredHeading, double dfMeasuredROT,
     double dfSpeed, double dfTime, bool bDoAdapt, bool bTurning);
    void SetParameters(double dfKStar, double dfTauStar, double dfZ, double dfWn,
        double dfBeta, double dfAlpha, double dfGamma, double dfXi,
        double dfRudderLimit, double dfCruisingSpeed, double dfShipLength,
        double dfMaxROT, bool bDecreaseAdapt, double dfRudderSpeed,
        double dfDeadband, double sample_T, bool filter_ROT);
    static double TwoSidedLimit(double dfNumToLimit, double dfLimit);
    std::string GetStatusInfo();
    std::string GetDebugInfo();
    void GetDebugVariables(double * vars);
    void ResetModel(double dfHeading, double dfROT, double dfRudder);
    void SwitchController();
    double GetModelRudder();
    double GetTauStar();
    double GetTauM();
    double GetKStar();

private:
    void InitModel(double dfHeading, double dfROT, double dfSpeed);
    void UpdateModel(double dfMeasuredROT, double dfRudder, double dfSpeed,
        double dfDeltaT, bool bDoAdapt, bool bTurning);
    void UpdateRudderModel(double dfDeltaT);

private: // Configuration variables

    double m_dfZ;
    double m_dfWn;
    double m_dfBeta;
    double m_dfAlpha;
    double m_dfGamma;
    double m_dfXi;
    double m_dfRudderLimit;
    double m_dfMaxROT;
    double m_dfCruisingSpeed;
    double m_dfShipLength;
    double m_bDecreaseAdapt;
    double m_dfMaxROTInc;
    double m_dfDeadband;

 private: //Derived variables
    double m_dfTauM;
    double m_dfKm;

 private: // State variables
    double m_dfKp;
    double m_dfKd;
    double m_dfKi;

    double m_dfKmStar;
    double m_dfTaumStar;

    double m_dfPreviousTime;
    double m_dfPreviousHeading;
    double m_dfMeasuredHeading;
    double m_dfMeasuredROT;
    double m_dfInitTime;
    long   m_lIterations;
    bool   m_bFirstRun;
    bool   m_bControllerSwitch;
    bool   m_bParametersSet;
    double m_dfRudderOut;

    double m_dfKm0;
    double m_dfTaum0;
    double m_dfKim0;
    double m_dfKim;
    double m_dfMu;

    double m_dfModelHeading;
    double m_dfModelROT;
    double m_dfSeriesHeading;
    double m_dfSeriesROT;
    double m_dfPsiRefP;
    double m_dfPsiRefPP;
    double m_dfF;
    double m_dfModelRudder;
    double m_dfModelPhiDotDot;

    double m_dfRudderPos;
    double m_dfRudderSpeed;

    SignalFilter m_RotFilter;
    double m_dfFilteredROT;
    bool   m_bFilterROT;
    std::deque<double> m_rudder_hist;
};

#endif


text:
from collections import OrderedDict

import attr

from rest_framework import serializers
from rest_framework.relations import HyperlinkedIdentityField
from rest_framework.validators import UniqueValidator, UniqueTogetherValidator

class ModelSubSerializer(serializers.ModelSerializer):
    """
    ModelSubSerializer allows you to wrap related attributes of a model into a
    sub-model dict, that uses the same model.

    Use ModelSubSerializer, rather than just populating a dict, for more
    rigorous specification and (hence) better Swagger-generated documentation.

    example usage:

    class Biography(ModelSubSerializer):
        class Meta:
            source_prefix = 'biography_' # 'biography_' is stripped from keys
            model = ArtistModel
            fields = (
                'biography_html',
            )

    class Artist(serializers.HyperlinkedModelSerializer):
        ...
        name = CharField()
        biography = Biography(help_text="HTML and text forms of the biography")
        ...

        class Meta:
            model = ArtistModel
            ...

    Yields, in an api response:

    {
        ...
        name: 'foo'
        biography: {
            html: "bar",
            text: "woo"
        },
        ...
    }
    """

    def get_fields(self):
        """
        Convert default field names for this sub-serializer into versions where
        the field name has the prefix removed, but each field object knows the
        real model field name by setting the field's `source` attribute.
        """
        prefix = getattr(self.Meta, 'source_prefix', '')
        fields = super(ModelSubSerializer, self).get_fields()
        fields_without_prefix = OrderedDict()
        for field_name, field in fields.items():
            if field_name.startswith(prefix):
                # Set real model field name as field's `source` unless the
                # source is already explicitly set, in which case it is
                # probably a method name not the direct field name
                if not field.source:
                    field.source = field_name
                field_name = field_name[len(prefix):]
            fields_without_prefix[field_name] = field
        return fields_without_prefix

    def get_attribute(self, instance):
        # This serializer also uses the same instance as the parent - we're
        # just wrapping related fields into a sub-object.
        return instance

@attr.s
class WritableRelatedFieldSettings(object):
    """
    - lookup_field: a field name, or list of field names, that uniquely
      identify an instance and will be used to look up an existing instance
      based on data provided. If a list of field names is provided, the first
      field name matching a provided value will be used.
    - can_create: ``True`` means new instances can be created for the field
    - can_update: ``True`` means instances can be updated for the field
    """
    lookup_field = attr.ib(default='id')
    can_create = attr.ib(default=False)
    can_update = attr.ib(default=False)

class WritableSerializerHelperMixin(object):
    """
    Mixin class to apply to parent serializers that *use* `ModelSerializer`
    and `ModelSubSerializer` related/relationship fields to make them able to
    handle create/update write operations on these fields with minimal extra
    code, to avoid failures like:

        The `.update()` method does not support writable nested fields by default.
        Write an explicit `.update()` method for serializer...

    `ModelSubSerializer` fields which are used merely for grouping of parent
    fields into a sub-secion are handled automatically.

    `ModelSerializer` fields must be explicitly configured to work by defining
    a `writable_related_fields` settings dictionary in the parent serializer's
    `Meta` class, mapping relationship field names to
    `WritableRelatedFieldSettings` values like so:

        class MySerializer(ModelSerializer):
            related_1 = AnotherModelSerializer()
            related_2 = AnotherModelSerializer(read_only=True)

            class Meta:
                model = MyModel
                fields = ('related',)
                writable_related_fields = {
                    'related_1': WritableRelatedFieldSettings(
                        can_create=False, can_update=True)
                }
    """

    def _populate_validated_data_with_sub_field_data(self, validated_data):
        """
        Move field data nested in `ModelSubSerializer` fields back into the
        overall validated data dict.
        """
        for fieldname, field in self.get_fields().items():
            if isinstance(field, ModelSubSerializer):
                field_data = validated_data.pop(fieldname, None)
                if field_data:
                    validated_data.update(field_data)

    def _prepare_related_single_or_m2m_relations(self, validated_data):
        """
        Handle writing to nested related model fields for both single and
        many-to-many relationships.

        For single relationships, any existing or new instance resulting from
        the provided data is set back into the provided `validated_data` to
        be applied by DjangoRestFramework's default handling.

        For M2M relationships, any existing or new instances resulting from
        the provided data are returned in a dictionary mapping M2M field names
        to a list of instances to be related. The actual relationship is then
        applied by `_write_related_m2m_relations` because DjangoRestFramework
        does not support assigning M2M fields.
        """
        many_to_many_relationships = {}
        for fieldname, field in self.get_fields().items():
            if (
                # `ModelSubSerializer` is handled separately
                isinstance(field, ModelSubSerializer) or
                # Skip read-only fields, obviously
                field.read_only or
                # Only list or model serializers are supported
                not (
                    isinstance(field, serializers.ModelSerializer) or
                    isinstance(field, serializers.ListSerializer)
                )
            ):
                continue  # Skip field

            is_list_field = isinstance(field, serializers.ListSerializer)

            if is_list_field:
                ModelClass = field.child.Meta.model
                field_data_list = validated_data.pop(fieldname, [])
            else:
                ModelClass = field.Meta.model
                field_data_list = validated_data.pop(fieldname, None)
                field_data_list = field_data_list and [field_data_list] or []

            # Skip field if no data was provided
            if not field_data_list:
                continue

            related_instances = []
            for field_data in field_data_list:
                related_instance = \
                    self._get_or_update_or_create_related_instance(
                        ModelClass, fieldname, field_data)
                if related_instance:
                    related_instances.append(related_instance)

            # Add related model instance as validated data parameter for
            # later create/update operation on parent instance.
            if not is_list_field:
                validated_data[fieldname] = related_instances[0]
            # Many-to-many relationships must be handled after super's `create`
            # or `update` method, not here. So we just return the list for now
            else:
                many_to_many_relationships[fieldname] = related_instances
        return many_to_many_relationships

    def _get_or_update_or_create_related_instance(
            self, ModelClass, fieldname, field_data
    ):
        """
        Handle lookup, update, or creation of related instances based on the
        field data provided and the field's `writable_related_fields` settings
        as defined on the serializer's `Meta`.

        This method will:

            - fail immediately if the field does not have
              `writable_related_fields` settings defined, or if these settings
              are not valid `WritableRelatedFieldSettings` objects

            - look up an existing instance using the defined `lookup_field` if
              a value is provided for the lookup field:

              - if no lookup field value is provided, fail unless `can_create`
                is set on the field since we cannot find any existing instance
              - if no existing instance is found, fail unless `can_create`
              - find the matching existing instance

            - if there is an existing instance:

              - if other data is provided, fail unless `can_update` is set
              - update existing instance based on other data provided if
                `can_update is set`
              - return the existing instance

            - if there is not an existing instance and `can_create` is set:

              - create a new instance with provided data
              - return the new instance
        """
        writable_related_fields = getattr(
            self.Meta, 'writable_related_fields', {})

        # Get settings for writable related field
        if fieldname not in writable_related_fields:
            raise TypeError(
                "Cannot write related model field '%s' for %s on %s"
                " without corresponding 'writable_related_fields' settings"
                " in the Meta class"
                % (fieldname, ModelClass.__name__,
                   self.Meta.model.__name__)
            )
        field_settings = writable_related_fields[fieldname]
        if not isinstance(field_settings, WritableRelatedFieldSettings):
            raise TypeError(
                "Settings for related model field '%s' in"
                " '%s.Meta.writable_related_fields' must be of type"
                " 'WritableRelatedFieldSettings': %s"
                % (fieldname, ModelClass.__name__, type(field_settings))
            )

        # Get settings for lookup field; may be a string or a strings list
        lookup_fields = field_settings.lookup_field
        if not isinstance(lookup_fields, (list, tuple)):
            lookup_fields = [lookup_fields]

        # We use the first of potentially multiple lookup field values for
        # which we have been given field data.
        lookup_value = None
        for lookup_field in lookup_fields:
            if lookup_field in field_data:
                lookup_value = field_data.pop(lookup_field)
                break

        # Fail if we have no lookup value and we cannot create an instance
        if lookup_value is None and not field_settings.can_create:
            raise TypeError(
                "Cannot look up related model field '%s' for %s on %s"
                " using the lookup field(s) %r because no value"
                " was provided for the lookup field(s) in %s"
                % (fieldname, ModelClass.__name__,
                    self.Meta.model.__name__, lookup_fields, field_data)
            )

        related_instance = None

        # Fetch existing instance using lookup field
        try:
            related_instance = ModelClass.objects.get(
                **{lookup_field: lookup_value})

            # Update existing related instance with values provided in
            # parent's create/update operation, if such updates are
            # permitted. If updates are not permitted, raise an exception
            # only if submitted values differ from existing ones.
            is_updated = False
            for name, value in field_data.items():
                original_value = getattr(related_instance, name)
                if value != original_value:
                    if not field_settings.can_update:
                        raise TypeError(
                            u"Cannot update instance for related model"
                            u" field '%s' for %s on %s because"
                            u" 'can_update' is not set for this field in"
                            u" 'writable_related_fields' but submitted"
                            u" value `%s=%s` does not match existing"
                            u" instance value `%s`"
                            % (fieldname, ModelClass.__name__,
                               self.Meta.model.__name__, name, value,
                               original_value)
                        )
                    setattr(related_instance, name, value)
                    is_updated = True
            if is_updated:
                related_instance.save()
        except ModelClass.MultipleObjectsReturned, ex:
            raise TypeError(
                "Cannot look up related model field '%s' for %s on %s"
                " using '%s' as the lookup field because it returns"
                " multiple results for value '%s': %s"
                % (fieldname, ModelClass.__name__,
                   self.Meta.model.__name__, lookup_field, lookup_value, ex)
            )
        # If a related instance does not yet exist, optionally create one
        except ModelClass.DoesNotExist:
            if not field_settings.can_create:
                raise TypeError(
                    "Cannot create instance for related model field '%s'"
                    " for %s on %s because 'can_create' is not set for"
                    " this field in 'writable_related_fields'"
                    % (fieldname, ModelClass.__name__,
                       self.Meta.model.__name__)
                )

            field_data.update({lookup_field: lookup_value})
            related_instance = ModelClass.objects.create(**field_data)

        return related_instance

    def _write_related_m2m_relations(self, obj, many_to_many_relationships):
        """
        For the given `many_to_many_relationships` dict mapping field names to
        a list of object instances, apply the instance listing to the `obj`s
        named many-to-many relationship field.
        """
        for fieldname, related_objs in many_to_many_relationships.items():
            # TODO On PATCH avoid clearing existing relationships not provided?
            setattr(obj, fieldname, related_objs)

    def create(self, validated_data):
        self._populate_validated_data_with_sub_field_data(validated_data)
        m2m_rels = self._prepare_related_single_or_m2m_relations(
            validated_data)
        obj = super(WritableSerializerHelperMixin, self).create(
            validated_data)
        self._write_related_m2m_relations(obj, m2m_rels)
        return obj

    def update(self, instance, validated_data):
        self._populate_validated_data_with_sub_field_data(validated_data)
        m2m_rels = self._prepare_related_single_or_m2m_relations(
            validated_data)
        obj = super(WritableSerializerHelperMixin, self).update(
            instance, validated_data)
        self._write_related_m2m_relations(obj, m2m_rels)
        return obj

class PolymorphicHyperlinkedRelatedField(HyperlinkedIdentityField):
    """
    Custom `HyperlinkedIdentityField` that allows the lookup view name for a
    hyperlink identify field (usually 'url') to be changed dynamically via
    `get_child_detail_view_name` in the parent serializer.
    """

    def get_url(self, obj, view_name, request, format):
        serializer = self.parent
        override_view_name = serializer.get_child_detail_view_name(obj)
        return super(PolymorphicHyperlinkedRelatedField, self) \
            .get_url(obj, override_view_name, request, format)

class PolymorphicHyperlinkedModelSerializer(
        serializers.HyperlinkedModelSerializer
):
    """
    Custom `HyperlinkedModelSerializer` that permits the lookup view name for
    the `url` field to be changed dynamically based on a lookup dict returned
    from the `get_child_view_name_data` method.

    This class combined with `PolymorphicHyperlinkedRelatedField` allows us to
    return data for polymorphic parent models by providing a manual lookup
    table of child-items to view names.
    """
    serializer_url_field = PolymorphicHyperlinkedRelatedField

    def get_child_detail_view_name(self, obj):
        real_obj = obj.get_real_instance()
        return self.get_child_view_name_data().get(
            type(real_obj),
            'TODO-add-child-detail-view-name-for-type-%s' % type(real_obj)
        ) + '-detail'

    def get_child_view_name_data(self, obj):
        raise NotImplementedError(
            "%s must implement `get_child_view_name_data`" % type(self))

class DisableUniqueTogetherValidatorMixin(object):
    """
    Mixin to easily disable the problematic `UniqueTogetherValidator` from
    DjangoRestFramework that automatically applies unique-together constraints
    of model fields so early in request processing that it makes it impossible
    to have any custom handling of affected fields.

    This mixin can help avoid situations like an API field being required
    despite us explicitly setting it as not required, e.g. the `slug` field in
    GLAMkit Collection models.
    """

    def get_validators(self):
        validators = super(DisableUniqueTogetherValidatorMixin, self) \
            .get_validators()
        disable_unique_together_fields = set(getattr(
            self.Meta, 'disable_unique_together_constraint_fields', []))
        if disable_unique_together_fields:
            initial_data_keys = set(self.initial_data.keys())
            validators = [
                v for v in validators
                # Only disable validation in specific case where it would apply
                # unique-together checks including the disabled fields where
                # that field is not present in the available data.
                if not(
                    type(v) == UniqueTogetherValidator and
                    disable_unique_together_fields.issubset(set(v.fields)) and
                    not disable_unique_together_fields.intersection(
                        initial_data_keys)
                )
            ]
        return validators

redpajama_set_name: RedPajamaGithub


text:
package org.apache.solr.cloud;

import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create;
import org.apache.solr.client.solrj.request.CollectionAdminRequest.SplitShard;
import org.junit.Test;

/**
 * Tests the Cloud Collections API.
 */
@Slow
public class CollectionsAPIAsyncDistributedZkTest extends AbstractFullDistribZkTestBase {
  private static final int MAX_TIMEOUT_SECONDS = 60;

  public CollectionsAPIAsyncDistributedZkTest() {
    sliceCount = 1;
  }

  @Test
  @ShardsFixed(num = 1)
  public void testSolrJAPICalls() throws Exception {
    try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
      Create createCollectionRequest = new Create()
              .setCollectionName("testasynccollectioncreation")
              .setNumShards(1)
              .setConfigName("conf1")
              .setAsyncId("1001");
      createCollectionRequest.process(client);

      String state = getRequestStateAfterCompletion("1001", MAX_TIMEOUT_SECONDS, client);

      assertEquals("CreateCollection task did not complete!", "completed", state);

      createCollectionRequest = new Create()
              .setCollectionName("testasynccollectioncreation")
              .setNumShards(1)
              .setConfigName("conf1")
              .setAsyncId("1002");
      createCollectionRequest.process(client);

      state = getRequestStateAfterCompletion("1002", MAX_TIMEOUT_SECONDS, client);

      assertEquals("Recreating a collection with the same name didn't fail, should have.", "failed", state);

      CollectionAdminRequest.AddReplica addReplica = new CollectionAdminRequest.AddReplica()
              .setCollectionName("testasynccollectioncreation")
              .setShardName("shard1")
              .setAsyncId("1003");
      client.request(addReplica);
      state = getRequestStateAfterCompletion("1003", MAX_TIMEOUT_SECONDS, client);
      assertEquals("Add replica did not complete", "completed", state);

      SplitShard splitShardRequest = new SplitShard()
              .setCollectionName("testasynccollectioncreation")
              .setShardName("shard1")
              .setAsyncId("1004");
      splitShardRequest.process(client);

      state = getRequestStateAfterCompletion("1004", MAX_TIMEOUT_SECONDS * 2, client);

      assertEquals("Shard split did not complete. Last recorded state: " + state, "completed", state);
    }
  }
}


text:
@interface AppDelegate ()<EMContactManagerDelegate,EMChatManagerDelegate,EMGroupManagerDelegate,EMClientDelegate,JPUSHRegisterDelegate>

@end

@implementation AppDelegate
@synthesize splashView;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self registerEMClientWithApplication:application withOptions:(NSDictionary *)launchOptions];//registerEMClient
    [self registerJPushWithOptions:launchOptions];
    [UserSession instance];

    self.window = [UIWindow windowInitWithRootViewController:[[VIPTabBarController alloc]init]];
#pragma mark -- 启动页动画
    [self.window makeKeyAndVisible];
    [YWStartAnimation startAnimationWithView:self.window];

    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

#pragma mark - EMClient
- (void)registerEMClientWithApplication:(UIApplication *)application withOptions:(NSDictionary *)launchOptions{
    NSString *apnsCertName = nil;
#if DEBUG
    apnsCertName = @"YvWaNotificationDevelop";
#else
    apnsCertName = @"YvWaNotificationProducation";
#endif
    NSString * appkey= @"ceoshanghaidurui#duruikejiyuwa";

    EMOptions *options = [EMOptions optionsWithAppkey:appkey];
    options.apnsCertName = apnsCertName;
    [[EMClient sharedClient] initializeSDKWithOptions:options];
    [[EMClient sharedClient].contactManager addDelegate:self delegateQueue:nil];//好友代理
    [[EMClient sharedClient] addDelegate:self delegateQueue:nil];//登录代理

    [[EaseSDKHelper shareHelper] hyphenateApplication:application didFinishLaunchingWithOptions:launchOptions appkey:appkey apnsCertName:apnsCertName otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];
}

- (void)friendRequestDidReceiveFromUser:(NSString *)aUsername message:(NSString *)aMessage{
    NSMutableArray * friendsRequest = [NSMutableArray arrayWithArray:[KUSERDEFAULT valueForKey:FRIENDSREQUEST]];
    NSDictionary * requestDic = @{@"hxID":aUsername,@"message":aMessage,@"status":@"0"};//0未读1未处理2同意3拒绝
    if (!friendsRequest)friendsRequest = [NSMutableArray arrayWithCapacity:0];
    [friendsRequest insertObject:requestDic atIndex:0];
    [KUSERDEFAULT setObject:friendsRequest forKey:FRIENDSREQUEST];
}

- (void)didLoginFromOtherDevice{//当前登录账号在其它设备登录时会接收到该回调
    [JPUSHService setAlias:@"" callbackSelector:nil object:nil];
}
- (void)didRemovedFromServer{//当前登录账号已经被从服务器端删除时会收到该回调
    [JPUSHService setAlias:@"" callbackSelector:nil object:nil];
}

#pragma mark - JPush
- (void)saveJupshNotificationDicWithDic:(NSDictionary *)dic{
    NSMutableArray * jpushArr = [NSMutableArray arrayWithArray:[KUSERDEFAULT valueForKey:JPush_Notification_DicArr]];
    if (!jpushArr)jpushArr = [NSMutableArray arrayWithCapacity:0];
    [jpushArr insertObject:dic atIndex:0];
    [KUSERDEFAULT setObject:jpushArr forKey:JPush_Notification_DicArr];
}

- (void)registerJPushWithOptions:(NSDictionary *)launchOptions{
    //    NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
        JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
        entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif
    } else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {//可以添加自定义categories
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
    }

    NSString * appKey = @"980bbea59e896101b75d4286";

    BOOL isProduction = NO;
#if DEBUG
    isProduction = NO;
#else
    isProduction = YES;
#endif

    //如不需要使用IDFA,advertisingIdentifier 可为nil
    [JPUSHService setupWithOption:launchOptions appKey:appKey channel:@"App Store" apsForProduction:isProduction advertisingIdentifier:nil];
    [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
        if(resCode == 0){
            MyLog(@"registrationID获取成功:%@",registrationID);
        }else{
            MyLog(@"registrationID获取失败,code:%d",resCode);
        }
    }];
    [JPUSHService setLogOFF];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {/// Required - 注册 DeviceToken
    [JPUSHService registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {//Optional
    MyLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
- (void)application:(UIApplication *)application
didRegisterUserNotificationSettings:
(UIUserNotificationSettings *)notificationSettings {
}

// Called when your app has been activated by the user selecting an action from
// a local notification.
// A nil action identifier indicates the default action.
// You should call the completion handler as soon as you've finished handling
// the action.
- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
forLocalNotification:(UILocalNotification *)notification
  completionHandler:(void (^)())completionHandler {
}

// Called when your app has been activated by the user selecting an action from
// a remote notification.
// A nil action identifier indicates the default action.
// You should call the completion handler as soon as you've finished handling
// the action.
- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
forRemoteNotification:(NSDictionary *)userInfo
  completionHandler:(void (^)())completionHandler {
}
#endif

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [UserSession instance].isNewNoticafication = YES;
    [UserSession refreshNoticaficationWithIsNewNoticafication:YES];
    [JPUSHService handleRemoteNotification:userInfo];
    MyLog(@"iOS7及以上系统,收到通知:%@", [self logDic:userInfo]);
    if ([[UIDevice currentDevice].systemVersion floatValue]<10.0 || application.applicationState>0) {
        [self saveJupshNotificationDicWithDic:userInfo];
    }

    completionHandler(UIBackgroundFetchResultNewData);
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max

#else
    //    [JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
#endif
}

#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#pragma mark- JPUSHRegisterDelegate
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
    [UserSession instance].isNewNoticafication = YES;
    [UserSession refreshNoticaficationWithIsNewNoticafication:YES];
    NSDictionary * userInfo = notification.request.content.userInfo;

    UNNotificationRequest *request = notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容

    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        MyLog(@"iOS10 前台收到远程通知:%@", [self logDic:userInfo]);

        [self saveJupshNotificationDicWithDic:userInfo];

    }else {// 判断为本地通知
        MyLog(@"iOS10 前台收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
    }
    completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置
}

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    NSDictionary * userInfo = response.notification.request.content.userInfo;
    UNNotificationRequest *request = response.notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容

    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);
        [self saveJupshNotificationDicWithDic:userInfo];

        NSString * documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
        NSString * filePath1 = [NSString stringWithFormat:@"%@/isPush.plist",documentPath];
        NSMutableDictionary * dic = [NSMutableDictionary dictionaryWithContentsOfFile:filePath1];
        if ([dic objectForKey:@"ispush"]) {
            //表示存在这个key,
            [dic setValue:@"1" forKey:@"ispush"];
        }else{
            [dic setValue:@"1" forKey:@"ispush"];
        }
        [dic writeToFile:filePath1 atomically:YES];
            self.window = [UIWindow windowInitWithRootViewController:[[VIPTabBarController alloc]init]];
    }else {
        // 判断为本地通知
        NSLog(@"iOS10    收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
    }

    completionHandler();  // 系统要求执行这个方法
}
#endif
// log NSSet with UTF8
// if not ,log will be \Uxxx
- (NSString *)logDic:(NSDictionary *)dic {
    if (![dic count])return nil;
    NSString *tempStr1 =
    [[dic description] stringByReplacingOccurrencesOfString:@"\\u"
                                                 withString:@"\\U"];
    NSString *tempStr2 =
    [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSString *tempStr3 =
    [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];

    NSString *str = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable format:NULL error:NULL];
    return str;
}

//本地添加
- (void)addLocalPushNotificationWithTime:(NSTimeInterval)secs withAlertBody:(NSString *)con{
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
    UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
    UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
    //    center.delegate = self;
    content.title = @"雨掌柜";// 标题
    content.subtitle = @"";// 子标题
    content.body = con;// 内容
    content.badge = @0;// 标记个数
    content.sound = [UNNotificationSound defaultSound];// 推送提示音
    // content.sound = [UNNotificationSound soundNamed:@"音频文件名"];// 指定音频文件
    //    content.launchImageName = @"Default";// 启动图片(好像不起作用)
    content.userInfo = @{@"name":@"YWLocalNotifiction"};// 附加信息
    //    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"puff.jpg" ofType:nil];// 添加附件
    //    UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"mazy" URL:[NSURL fileURLWithPath:filePath] options:0 error:nil];
    //    content.attachments = @[attachment];

    UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:secs+0.1 repeats:NO];// 通过时间差,多少秒后推送本地推送
    UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"YWLocalNotifiction" content:content trigger:trigger];

    //添加推送成功后的处理!
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            MyLog(@"推送添加成功");
        }
    }];

#else
    UILocalNotification *notification = [[UILocalNotification alloc] init];// 创建一个本地推送
    NSDate * nowDate = [NSDate dateWithTimeIntervalSinceNow:secs];// secs 秒 后 推送一条消息

    if (notification != nil) {
        notification.fireDate = nowDate;// 设置推送时间
        notification.timeZone = [NSTimeZone defaultTimeZone];// 设置时区
        notification.repeatInterval = 0;// 设置重复间隔
        notification.soundName =UILocalNotificationDefaultSoundName;// 推送声音
        notification.alertBody = con;// 推送内容
        //        notification.applicationIconBadgeNumber = 1;//显示在icon上的红色圈中的数子
        NSDictionary *info = [NSDictionary dictionaryWithObject:@"name" forKey:@"YWLocalNotifiction"];
        notification.userInfo = info;//设置userinfo 方便在之后需要撤销的时候使用
        UIApplication *app = [UIApplication sharedApplication];//添加推送到UIApplication
        [app scheduleLocalNotification:notification];
    }
#endif
}

//- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{
//    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"雨娃" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
//
//    [alert show];
////    application.applicationIconBadgeNumber -= 1;// 图标上的数字减1
//    MyLog(@"didReceiveLocalNotification");
//
//}
//- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//    if(buttonIndex == 1){
//        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://fir.im/XXXX"]];
//    }
//}

@end


text:
package writer

import (
	"testing"

	"github.com/m3db/m3/src/metrics/metric/aggregated"
	"github.com/m3db/m3/src/metrics/metric/id"
	"github.com/m3db/m3/src/x/instrument"
	xtest "github.com/m3db/m3/src/x/test"

	"github.com/golang/mock/gomock"
	"github.com/stretchr/testify/require"
)

func TestNewShardedWriter(t *testing.T) {
	ctrl := gomock.NewController(xtest.Reporter{t})
	defer ctrl.Finish()

	w1, w2 := NewMockWriter(ctrl), NewMockWriter(ctrl)
	writers := []Writer{w1, w2}

	shardFn := func(_ id.ChunkedID, _ int) uint32 {
		return 0
	}

	w, err := NewShardedWriter(writers, shardFn, instrument.NewOptions())
	require.NoError(t, err)

	metric := aggregated.ChunkedMetricWithStoragePolicy{
		ChunkedMetric: aggregated.ChunkedMetric{
			ChunkedID: id.ChunkedID{
				Data: []byte("some-random-id"),
			},
		},
	}

	w1.EXPECT().Write(metric).Return(nil)
	require.NoError(t, w.Write(metric))

	w1.EXPECT().Flush().Return(nil)
	w2.EXPECT().Flush().Return(nil)
	require.NoError(t, w.Flush())

	w1.EXPECT().Close().Return(nil)
	w2.EXPECT().Close().Return(nil)
	require.NoError(t, w.Close())
}


text:
'use strict';

const expect = require('chai').expect;
const filters = require('../src/common-filters');

describe('castArray', function() {
    it('object cast to array', function() {
        expect(filters.castArray({a:1, b:2})).to.deep.equal([{a:1, b:2}]);
    });

    it('array cast to array', function() {
        expect(filters.castArray([1,2])).to.deep.equal([1,2]);
    });

    it('string cast to array', function() {
        expect(filters.castArray('abc')).to.deep.equal(['abc']);
    });

    it('number cast to array', function() {
        expect(filters.castArray(7)).to.deep.equal([7]);
    });

    it('regexp cast to array', function() {
        expect(filters.castArray(/.*/)).to.deep.equal([/.*/]);
    });

    it('undefined cast to array', function() {
        expect(filters.castArray(undefined)).to.deep.equal([]);
    });

    it('null cast to array', function() {
        expect(filters.castArray(null)).to.deep.equal([null]);
    });

    it('true cast to array', function() {
        expect(filters.castArray(true)).to.deep.equal([true]);
    });

    it('false cast to array', function() {
        expect(filters.castArray(false)).to.deep.equal([false]);
    });
});


text:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    backupGlobals               = "false"
    backupStaticAttributes      = "false"
    bootstrap                   = "vendor/autoload.php"
    colors                      = "true"
    convertErrorsToExceptions   = "true"
    convertNoticesToExceptions  = "true"
    convertWarningsToExceptions = "true"
    processIsolation            = "true"
    stopOnFailure               = "false"
    syntaxCheck                 = "true"
    verbose                     = "false"
    testDox                     = "false"
>
    <testsuites>
        <testsuite name="full">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
        <testsuite name="instance">
            <directory suffix="InstanceTest.php">./tests</directory>
        </testsuite>
    </testsuites>

    <filter>
        <blacklist>
            <directory suffix=".php">./tests</directory>
            <directory suffix=".php">vendor</directory>
            <file>src/Channel.template.php</file>
        </blacklist>
    </filter>

    <logging>
        <log type="coverage-html" target="coverage" lowUpperBound="50" highLowerBound="90"/>
        <log type="testdox-html" target="coverage/testdox.html"/>
    </logging>

</phpunit>


text:
<title>TARUCincaitalks</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css">

<link rel="stylesheet" href="css/bootstrap/bootstrap-theme.min.css">
<link rel="stylesheet" href="lib/tether/css/tether.min.css">

<link href="css/style.css" rel="stylesheet">
<link href="css/css.css" rel="stylesheet">

<link href="css/bootstrap/font-awesome.css" rel="stylesheet" />
<link rel="icon" type="image/png" href="img/favicon.png" />

      CINCAITALKS
        <button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#sbda-nav"></button>

                Home (current)

                Categories

                    F&B
                    Sport
                    Beh Tahan
                    Love Story
                    Entertainment
                    Sales & Rent
                    Lost & Found
                    Other

                About us(current)

                Create Post

<button class="btn btn-sm btn-primary btnFacebookLogin" style="padding:0px;margin-right:10px" ng-click="fbAuth('facebook')" type="submit">Login by Facebook</button>

                    Please
                    Login OR
                    Sign up

            <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="padding: 0px 5px 0px 10px;visibility:hidden">
                {{displayname}}
            </button>

                Change Password
                Setting
                Logout

Welcome to TARUCincaitalks

What we care is your privacy.

In CINCAITALKS we trust , just POST & COMMENT.

{{breakLine_title}}

<direct-post-details></direct-post-details>
<direct-create-post></direct-create-post>
<direct-login-form></direct-login-form>
<direct-signup-form></direct-signup-form>
<direct-user-setting></direct-user-setting>
<direct-edit-post></direct-edit-post>


text:
package com.joelapenna.foursquared;

import com.joelapenna.foursquare.Foursquare;
import com.joelapenna.foursquare.types.Group;
import com.joelapenna.foursquare.types.User;
import com.joelapenna.foursquared.app.LoadableListActivity;
import com.joelapenna.foursquared.location.LocationUtils;
import com.joelapenna.foursquared.util.NotificationsUtil;
import com.joelapenna.foursquared.widget.FriendListAdapter;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

/**
 * Shows a list of friends for the user id passed as an intent extra.
 *
 * @date March 9, 2010
 * @author Mark Wyszomierski (markww@gmail.com)
 */
public class UserDetailsFriendsActivity extends LoadableListActivity {
    static final String TAG = "UserDetailsFriendsActivity";
    static final boolean DEBUG = FoursquaredSettings.DEBUG;

    public static final String EXTRA_USER_ID = Foursquared.PACKAGE_NAME
        + ".UserDetailsFriendsActivity.EXTRA_USER_ID";
    public static final String EXTRA_USER_NAME = Foursquared.PACKAGE_NAME
        + ".UserDetailsFriendsActivity.EXTRA_USER_NAME";

    public static final String EXTRA_SHOW_ADD_FRIEND_OPTIONS = Foursquared.PACKAGE_NAME
        + ".UserDetailsFriendsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS";

    private StateHolder mStateHolder;
    private FriendListAdapter mListAdapter;

    private BroadcastReceiver mLoggedOutReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (DEBUG) Log.d(TAG, "onReceive: " + intent);
            finish();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        registerReceiver(mLoggedOutReceiver, new IntentFilter(Foursquared.INTENT_ACTION_LOGGED_OUT));

        Object retained = getLastNonConfigurationInstance();
        if (retained != null && retained instanceof StateHolder) {
            mStateHolder = (StateHolder) retained;
            mStateHolder.setActivityForTaskFriends(this);
        } else {
            if (getIntent().hasExtra(EXTRA_USER_ID) && getIntent().hasExtra(EXTRA_USER_NAME)) {
                mStateHolder = new StateHolder(
                        getIntent().getStringExtra(EXTRA_USER_ID),
                        getIntent().getStringExtra(EXTRA_USER_NAME));
            } else {
                Log.e(TAG, TAG + " requires a userid and username in its intent extras.");
                finish();
                return;
            }

            mStateHolder.startTaskFriends(this);
        }

        ensureUi();
    }

    @Override
    public void onPause() {
        super.onPause();

        if (isFinishing()) {
            mStateHolder.cancelTasks();
            mListAdapter.removeObserver();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mLoggedOutReceiver);
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        mStateHolder.setActivityForTaskFriends(null);
        return mStateHolder;
    }

    private void ensureUi() {
        mListAdapter = new FriendListAdapter(this,
            ((Foursquared) getApplication()).getRemoteResourceManager());
        mListAdapter.setGroup(mStateHolder.getFriends());

        ListView listView = getListView();
        listView.setAdapter(mListAdapter);
        listView.setSmoothScrollbarEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                User user = (User) parent.getAdapter().getItem(position);
                Intent intent = new Intent(UserDetailsFriendsActivity.this, UserDetailsActivity.class);
                intent.putExtra(UserDetailsActivity.EXTRA_USER_PARCEL, user);
                intent.putExtra(UserDetailsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS, true);
                startActivity(intent);
            }
        });

        if (mStateHolder.getIsRunningFriendsTask()) {
            setLoadingView();
        } else if (mStateHolder.getFetchedFriendsOnce() && mStateHolder.getFriends().size() == 0) {
            setEmptyView();
        }

        setTitle(getString(R.string.user_details_friends_activity_title, mStateHolder.getUsername()));
    }

    private void onFriendsTaskComplete(Group<User> group, Exception ex) {
        mListAdapter.removeObserver();
        mListAdapter = new FriendListAdapter(this,
            ((Foursquared) getApplication()).getRemoteResourceManager());
        if (group != null) {
            mStateHolder.setFriends(group);
            mListAdapter.setGroup(mStateHolder.getFriends());
            getListView().setAdapter(mListAdapter);
        }
        else {
            mStateHolder.setFriends(new Group<User>());
            mListAdapter.setGroup(mStateHolder.getFriends());
            getListView().setAdapter(mListAdapter);

            NotificationsUtil.ToastReasonForFailure(this, ex);
        }
        mStateHolder.setIsRunningFriendsTask(false);
        mStateHolder.setFetchedFriendsOnce(true);

        // TODO: We can probably tighten this up by just calling ensureUI() again.
        if (mStateHolder.getFriends().size() == 0) {
            setEmptyView();
        }
    }

    /**
     * Gets friends of the current user we're working for.
     */
    private static class FriendsTask extends AsyncTask<String, Void, Group<User>> {

        private UserDetailsFriendsActivity mActivity;
        private Exception mReason;

        public FriendsTask(UserDetailsFriendsActivity activity) {
            mActivity = activity;
        }

        @Override
        protected void onPreExecute() {
            mActivity.setLoadingView();
        }

        @Override
        protected Group<User> doInBackground(String... params) {
            try {
                Foursquared foursquared = (Foursquared) mActivity.getApplication();
                Foursquare foursquare = foursquared.getFoursquare();
                return foursquare.friends(
                    params[0], LocationUtils.createFoursquareLocation(foursquared.getLastKnownLocation()));
            } catch (Exception e) {
                mReason = e;
            }
            return null;
        }

        @Override
        protected void onPostExecute(Group<User> users) {
            if (mActivity != null) {
                mActivity.onFriendsTaskComplete(users, mReason);
            }
        }

        @Override
        protected void onCancelled() {
            if (mActivity != null) {
                mActivity.onFriendsTaskComplete(null, mReason);
            }
        }

        public void setActivity(UserDetailsFriendsActivity activity) {
            mActivity = activity;
        }
    }

    private static class StateHolder {

        private String mUserId;
        private String mUsername;
        private Group<User> mFriends;

        private FriendsTask mTaskFriends;
        private boolean mIsRunningFriendsTask;
        private boolean mFetchedFriendsOnce;

        public StateHolder(String userId, String username) {
            mUserId = userId;
            mUsername = username;
            mIsRunningFriendsTask = false;
            mFetchedFriendsOnce = false;
            mFriends = new Group<User>();
        }

        public String getUsername() {
            return mUsername;
        }

        public Group<User> getFriends() {
            return mFriends;
        }

        public void setFriends(Group<User> friends) {
            mFriends = friends;
        }

        public void startTaskFriends(UserDetailsFriendsActivity activity) {
            mIsRunningFriendsTask = true;
            mTaskFriends = new FriendsTask(activity);
            mTaskFriends.execute(mUserId);
        }

        public void setActivityForTaskFriends(UserDetailsFriendsActivity activity) {
            if (mTaskFriends != null) {
                mTaskFriends.setActivity(activity);
            }
        }

        public void setIsRunningFriendsTask(boolean isRunning) {
            mIsRunningFriendsTask = isRunning;
        }

        public boolean getIsRunningFriendsTask() {
            return mIsRunningFriendsTask;
        }

        public void setFetchedFriendsOnce(boolean fetchedOnce) {
            mFetchedFriendsOnce = fetchedOnce;
        }

        public boolean getFetchedFriendsOnce() {
            return mFetchedFriendsOnce;
        }

        public void cancelTasks() {
            if (mTaskFriends != null) {
                mTaskFriends.setActivity(null);
                mTaskFriends.cancel(true);
            }
        }
    }
}


text:
<?php

namespace Eilander\Repository;

use Eilander\Repository\Collections\ElasticsearchCollection;

class Elasticsearch extends ElasticsearchCollection
{
}


text:
using System;
using System.Collections.Generic;
using System.Linq;
using Expressive.Core.Exceptions;
using Expressive.Core.Extensions;
using Expressive.Core.Language.Expressions;

namespace Expressive.Core.Language
{
    public static class Parser
    {
        //constant:
        //    Integer
        //    Float
        //    String
        //    Boolean

        //symbol:
        //    ReplacementSymbol
        //    Symbol

        //value:
        //    constant
        //    symbol
        //    operation
        //    scope

        //operation: value Operator value

        //list-expression: value-source , value-source

        //scope: StartScope value-source EndScope

        //value-source:
        //    value
        //    scope
        //    function
        //    operation

        //function: symbol StartScope list-expression EndScope | symbol StartScope value-source EndScope
        public static Expression Parse(List<Token> tokens)
        {
            if (tokens == null || tokens.None())
                return new NullExpression();
            var remainder = tokens.ToList();
            Expression program = null;
            while (remainder.Any())
            {
                Production parsed = null;
                var current = remainder.First();
                switch (current.TokenClass)
                {
                    case TokenClass.StartScope:
                        parsed = new ScopedExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new SeparatedExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new ErrorExpression().Parse(program, remainder);
                        break;
                    case TokenClass.Whitespace:
                        parsed = new WhitespaceExpression().Parse(remainder);
                        break;
                    case TokenClass.Symbol:
                        parsed = new OperationExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new FunctionExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new SymbolExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new ErrorExpression().Parse(program, remainder);
                        break;
                    case TokenClass.ReplacementSymbol:
                        parsed = new OperationExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new ReplacementSymbolExpression().Parse(remainder);
                        break;
                    case TokenClass.Float:
                    case TokenClass.Integer:
                        parsed = new OperationExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = NumericExpression.TryParseNumeric(remainder);
                        break;
                    case TokenClass.String:
                        parsed = new OperationExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new StringExpression().Parse(remainder);
                        break;
                    case TokenClass.Boolean:
                        parsed = new OperationExpression().Parse(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new BooleanExpression().Parse(remainder);
                        break;
                    case TokenClass.Operator:
                        parsed = NumericExpression.TryParseNumeric(remainder);
                        if (parsed.Expression != null) break;
                        parsed = new OperationExpression().Parse(program, remainder);
                        if (parsed.Expression != null) break;
                        parsed = new ErrorExpression().Parse(program, remainder);
                        break;
                    case TokenClass.Error:
                        throw new Exception("Unexpected sequence: " + remainder.First().Lexeme);
                    default:
                        throw new ArgumentOutOfRangeException();
                }
                if (parsed.Expression != null && !(parsed.Expression is WhitespaceExpression)) program = parsed.Expression;
                remainder = parsed.RemainingTokens;
            }
            if (program == null || remainder.Any()) throw new ParserException(remainder.Select(c => c.Lexeme).StringConcat());
            return program;
        }
    }
}


text:
<!DOCTYPE html>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport">
<title>Multi Expression Programming - what is new</title>
<meta name ="KEYWORDS" content="Multi Expression Programming, Genetic Programming, Genetic algorithms, data analysis, symbolic regression, classification, research news" />
<meta name= "description"  content="Multi Expression Programming - what is new" />

What is new

Home

    News

Description

Papers

Source code

MEPX Software

    Videos

    Screenshots

    User manual

News

Links

Contact

This page has been moved here. Please check there for news...

For news, please subscribe here: https://groups.google.com/d/forum/mepx

2017.10.04. New major release for MEPX that includes new strategies for multi-class classification and several bug fixes.

2017.08.05. New website mirror at https://mepx.github.io/.

2016.11.30. New source code for evolving Evolutionary Algorithms for Single Objective Optimization using MEP is available on Github.

2016.10.05. Paper section updated.

2016.08.29. New MEPX release. Bug fixing. More exact function for counting the running time. New random number generator.

2016.08.09. New MEPX release. Bug fixing.

2016.07.17. List of papers updated.

2016.05.24. New MEP source code for solving even-parity problems with Automatically Defined Functions. Can be downloaded from https://github.com/mepx/mep-basic-src.

2016.04.27. New MEPX release. There is a checkbox on the Training data tab which displays or inhibits the display of grids data (training, validation and test). I have chose not to display the data because filling a grid with data takes a lot of time. So, if you have many data or a large project, I suggest to uncheck this box before loading them. Several bugs have been fixed.

2016.04.07-2016.04.25. Several strategies for multi-class classification have been tested. See more details here. However, none of them could compete with what we have so far implemented in MEPX or libmep.

2016.04.06. New MEPX release. Bug fix in the display of Target column.

2016.04.05. New MEPX release. Statistics for runs and errors can now copied directly to Clipboard. This is very useful for performing Copy-Paste to Excel or related programs.

2016.04.03. New MEPX release. Added Mean Squared Error for fitness computation in the case of regression problems. Previously was only Mean Absolute Error. In the case of classification problems the error is now multiplied by 100 in order to show the percentage.

2016.04.02. List of papers updated.

2016.03.31. New MEPX release. Display the best error (for training, validation and test), mean and stddev over multiple runs. Several bugs have been fixed.

2016.03.27. New MEPX release. Adds random subset selection (RSS) which means that fitness is computed on a smaller set of data. RSS set is randomly selected at each generation. By using RSS the program runs faster.

2016.03.26. Mirror copy of the MEP site at: mepx.org. This short name is much more easier to memorize than the long name of the site hosted on our faculty server.

2016.03.25. New MEPX release. 64bit version for Windows is now available. A status bar has been added which displays the current generation, best training error, average training error (over the entire population) and validation error. Selecting the individual to be moved in the next subpopulation is now done randomly (previously it was made with tournament selection).

2016.03.22. New MEPX release. Can load PROBEN1 files. Several bugs have been fixes.

2016.03.15. New MEPX release. Now it can solve classification problems with multiple classes (>= 2). Also the latest version contains some bug fixes.

2016.03.02. New MEPX release. To numeric and scale buttons have been moved to Advanced panel of the Data. Also the latest version contains some bug fixes.

2016.02.21. MEP source code for solving classification problems with multiple classes (2 or more) has been added to the Github repository (see mep_multi_class.cpp from https://github.com/mepx/mep). Multi class is NOT yet available for libmep library and neither in MEPX.

2016.02.16. New MEPX version which now displays the variable index (like "x 99") in the header of the training, validation and test tables. Also the latest version contains some bug fixes.

2016.02.12. Google group about MEP created. Address is here: https://groups.google.com/d/forum/mepx

2016.02.06. New MEPX version which contains some bug fixes.

2016.02.03. Source code moved to Github.

2016.02.03. New MEP source code with C++11 threads.

2015.11.15. New MEPX version with many new features: can load alphanumerical values, can find/replace/scale values, can shuffle rows (in a random order) can move data between training, validation and test etc.

2015.08.15. New MEP source code with multiple sub-populations. Also a small bug fix in MEP source code.

2015.08.05. Bug fix in MEP source code.

2015.08.03. MEPX for Ubuntu 64 bit is now available for download.

2015.07.30. MEP source code for evolving digital circuits has been added to the Source code section.

2015.05.23. A new button which saves (training, validation, test) data from existing project (xml files) to text files. Also several bugs have been fixed.

2015.05.17. Classification threshold parameter has been removed. Now the program discover the best threshold by itself. It is slower than previous, but now there are no more wasted iterations with not optimal threshold. Previous classification projects must be run again because the previous classification parameter is ignored.

Several bugs have been fixed.

2015.05.15. New operators: if (a < 0)?b:c and if (a < b)?c:d and a little bit more speed.

2015.05.14. Multi-core support for MEPX. Just set the number of cores from the parameters window and the program will do the computations in parallel.

2015.05.10. Source code updated. Now it contains constants and shows how to solve binary classification problems.

2015.05.09. Speed optimization of MEPX. For building1-energy problem from the archive, the running time was reduces from 190 seconds downto 126 seconds. Other parameters were: population size = 1000, code length = 100, num generations = 100.

2015.05.06. More operators added to MEPX software.

2015.05.06. New youtube movie on how to use MEPX software.

2015.05.05. New end-user software for Windows, Mac and Linux.

2015.05.05. Website updated.

2008.09.01. Papers section updated.

2005.02.01. Software section updated.

2014.12.01. Papers section updated.

2004.07.01. New methods and their websites:  Traceless Genetic Programming, Evolving Evolutionary Algorithms

2004.04.03. New MEP source code.

2002.01.13 First paper on Multi Expression Programming was written.

2001. Work started on Multi Expression Programming.


text:
package edu.stanford.nlp.trees.international.pennchinese;

import java.io.File;

public class CEDict {
  private static final String defaultPath = "cedict_ts.u8";
  private static final String defaultPath2 = "/u/nlp/data/chinese-english-dictionary/cedict_ts.u8";
  private static final String ENV_VARIABLE = "CEDICT";

  public static String path() {
    File f = new File(defaultPath);
    if (f.canRead()) {
      return defaultPath;
    } else {
      f = new File(defaultPath2);
      if (f.canRead()) {
        return defaultPath2;
      } else {
        String path = System.getenv(ENV_VARIABLE);
        f = new File(path);
        if ( ! f.canRead()) {
          throw new RuntimeException("ChineseEnglishWordMap cannot find dictionary");
        }
        return path;
      }
    }
  }

  private CEDict() {} // static methods only
}


text:
#include "mitkLabeledImageToSurfaceFilter.h"
#include "mitkReferenceCountWatcher.h"
#include <itksys/SystemTools.hxx>

#include "mitkIOUtil.h"

#include <cmath>

bool equals(const mitk::ScalarType &val1, const mitk::ScalarType &val2, mitk::ScalarType epsilon = mitk::eps)
{
  return (std::fabs(val1 - val2) <= epsilon);
}

int mitkLabeledImageToSurfaceFilterTest(int argc, char *argv[])
{
  if (argc < 2)
  {
    std::cout << "no path to testing specified [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }

  std::string fileIn = argv[1];
  std::cout << "Eingabe Datei: " << fileIn << std::endl;
  mitk::Image::Pointer image = mitk::IOUtil::Load<mitk::Image>(fileIn);
  if (image->GetPixelType() != mitk::PixelType(mitk::MakeScalarPixelType<char>()) ||
      image->GetPixelType() != mitk::PixelType(mitk::MakeScalarPixelType<unsigned char>()))
  {
    std::cout << "file not a char or unsigned char image - test will not be applied [PASSED]" << std::endl;
    std::cout << "[TEST DONE]" << std::endl;
    return EXIT_SUCCESS;
  }

  std::cout << "Testing instantiation: ";
  mitk::LabeledImageToSurfaceFilter::Pointer filter = mitk::LabeledImageToSurfaceFilter::New();
  if (filter.IsNull())
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Create surface with default settings: ";
  filter->SetInput(image);
  filter->Update();

  if (filter->GetNumberOfOutputs() != 1)
  {
    std::cout << "Wrong number of outputs, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput() == nullptr)
  {
    std::cout << "Output is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput()->GetVtkPolyData() == nullptr)
  {
    std::cout << "PolyData of surface is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing index to label conversion: ";
  if (filter->GetLabelForNthOutput(0) != 257)
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for label calculation: ";
  if (!equals(filter->GetVolumeForLabel(257), 14.328))
  {
    std::cout << filter->GetVolumeForLabel(257) << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for index calculation: ";
  if (!equals(filter->GetVolumeForNthOutput(0), 14.328))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Create surface using optimised settings: ";
  filter->GenerateAllLabelsOn();
  filter->SetGaussianStandardDeviation(1.5);
  filter->SetSmooth(true); // smooth wireframe
  filter->SetDecimate(mitk::ImageToSurfaceFilter::DecimatePro);
  filter->SetTargetReduction(0.8);
  if (filter->GetNumberOfOutputs() != 1)
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Create surface for label 257: ";
  filter->GenerateAllLabelsOff();
  filter->SetLabel(257);
  filter->Update();
  if (filter->GetNumberOfOutputs() != 1)
  {
    std::cout << "Wrong number of outputs, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput() == nullptr)
  {
    std::cout << "Output is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput()->GetVtkPolyData() == nullptr)
  {
    std::cout << "PolyData of surface is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for label calculation: ";
  if (!equals(filter->GetVolumeForLabel(257), 14.328))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for index calculation: ";
  if (!equals(filter->GetVolumeForNthOutput(0), 14.328))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Create surface for multiple labels: ";
  filter->GenerateAllLabelsOn();
  filter->SetBackgroundLabel(32000);
  filter->Update();
  if (filter->GetNumberOfOutputs() != 2)
  {
    std::cout << "Wrong number of outputs, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput() == nullptr)
  {
    std::cout << "Output 0 is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput()->GetVtkPolyData() == nullptr)
  {
    std::cout << "PolyData of output 0 is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput(1) == nullptr)
  {
    std::cout << "Output 1 is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput(1)->GetVtkPolyData() == nullptr)
  {
    std::cout << "PolyData of output 1 is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for label calculation: ";
  if (!equals(filter->GetVolumeForLabel(257), 14.328))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (!equals(filter->GetVolumeForLabel(0), 12.672))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for index calculation: ";
  if (!equals(filter->GetVolumeForNthOutput(1), 14.328))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (!equals(filter->GetVolumeForNthOutput(0), 12.672))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  mitk::ReferenceCountWatcher::Pointer outputSurface1Watcher =
    new mitk::ReferenceCountWatcher(filter->GetOutput(1), "outputSurface1");
  mitk::ReferenceCountWatcher::Pointer filterWatcher = new mitk::ReferenceCountWatcher(filter, "filter");

  std::cout << "Create surface for background (label 0): " << std::flush;
  filter->GenerateAllLabelsOff();
  filter->SetLabel(0);
  filter->SetBackgroundLabel(257);
  // mitk::Surface::Pointer surface = filter->GetOutput(1);
  // std::cout<< surface->GetReferenceCount() << std::endl;
  filter->Update();
  // surface = nullptr;

  if (filter->GetNumberOfOutputs() != 1)
  {
    std::cout << "Wrong number of outputs, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput() == nullptr)
  {
    std::cout << "Output is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput()->GetVtkPolyData() == nullptr)
  {
    std::cout << "PolyData of surface is nullptr, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }
  std::cout << "Testing reference count correctness of old output 1: " << std::flush;
  if (outputSurface1Watcher->GetReferenceCount() != 0)
  {
    std::cout << "outputSurface1Watcher->GetReferenceCount()==" << outputSurface1Watcher->GetReferenceCount()
              << "!=0, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  std::cout << "[PASSED]" << std::endl;
  std::cout << "Testing reference count correctness of filter: " << std::flush;
  if (filterWatcher->GetReferenceCount() != 2)
  {
    std::cout << "filterWatcher->GetReferenceCount()==" << outputSurface1Watcher->GetReferenceCount() << "!=2, [FAILED]"
              << std::endl;
    return EXIT_FAILURE;
  }
  std::cout << "[PASSED]" << std::endl;

  std::cout << "Testing index to label conversion: ";
  if (filter->GetLabelForNthOutput(0) != 0)
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for label calculation: ";
  if (!equals(filter->GetVolumeForLabel(filter->GetLabel()), 12.672))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Testing volume for index calculation: ";
  if (!equals(filter->GetVolumeForNthOutput(0), 12.672))
  {
    std::cout << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "Create surface for invalid label: ";
  filter->GenerateAllLabelsOff();
  filter->SetLabel(1);
  filter->Update();
  if (filter->GetNumberOfOutputs() != 1)
  {
    std::cout << "Number of outputs != 1, [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else if (filter->GetOutput()->GetVtkPolyData()->GetNumberOfPoints() != 0)
  {
    std::cout << "PolyData is not empty (" << filter->GetOutput()->GetVtkPolyData()->GetNumberOfPoints()
              << "), [FAILED]" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "[PASSED]" << std::endl;
  }

  std::cout << "[TEST DONE]" << std::endl;
  return EXIT_SUCCESS;
}


text:
'''Builds the lib and examples packages. Then, syncs to Dropbox
'''
import os
import subprocess
import shutil

from paths import PROJECT_DIR

SYNC_JARS = True

HOME_DIR = os.getenv("HOME")

OUTPUT_DIR = os.path.join(HOME_DIR, 'Dropbox/Public/')

LIB_JAR_PATH = os.path.join(HOME_DIR,
                            '.ivy2/local/ch.ethz.dalab/dissolvestruct_2.10/0.1-SNAPSHOT/jars/dissolvestruct_2.10.jar')
EXAMPLES_JAR_PATH = os.path.join(PROJECT_DIR, 'dissolve-struct-examples', 'target/scala-2.10/',
                                 'dissolvestructexample_2.10-0.1-SNAPSHOT.jar')
SCOPT_JAR_PATH = os.path.join(HOME_DIR, '.ivy2/cache/com.github.scopt/scopt_2.10/jars/scopt_2.10-3.3.0.jar')

def execute(command, cwd='.'):
    subprocess.check_call(command, cwd=cwd)

def main():
    dissolve_lib_dir = os.path.join(PROJECT_DIR, 'dissolve-struct-lib')
    dissolve_examples_dir = os.path.join(PROJECT_DIR, 'dissolve-struct-examples')

    # Build lib package
    print "=== Building dissolve-struct-lib ==="
    lib_build_cmd = ["sbt", "publish-local"]
    execute(lib_build_cmd, cwd=dissolve_lib_dir)

    # Build examples package
    print "=== Building dissolve-struct-examples ==="
    examples_build_cmd = ["sbt", "package"]
    execute(examples_build_cmd, cwd=dissolve_examples_dir)

    # Sync all packages to specified output directory
    if SYNC_JARS:
        print "=== Syncing Jars to Dropbox Public Folder ==="
        print LIB_JAR_PATH
        shutil.copy(LIB_JAR_PATH, OUTPUT_DIR)
        print EXAMPLES_JAR_PATH
        shutil.copy(EXAMPLES_JAR_PATH, OUTPUT_DIR)
        print SCOPT_JAR_PATH
        shutil.copy(SCOPT_JAR_PATH, OUTPUT_DIR)

if __name__ == '__main__':
    main()


text:
@font-face {
  font-family: "iconissimo";
  src: url("../font/jrsfont.eot");
  src: url("../font/jrsfont.eot?#iefix") format("embedded-opentype"),
       url("../font/jrsfont.woff") format("woff"),
       url("../font/jrsfont.ttf") format("truetype"),
       url("../font/jrsfont.svg#jrsfont") format("svg");
  font-weight: normal;
  font-style: normal;
}

@media screen and (-webkit-min-device-pixel-ratio:0) {
  @font-face {
    font-family: "iconissimo";
    src: url("../font/jrsfont.svg#jrsfont") format("svg");
  }
}

[data-icon]:before { content: attr(data-icon); }

[data-icon]:before,
.icon-add-album:before,
.icon-add-info:before,
.icon-album:before,
.icon-android:before,
.icon-angle-down:before,
.icon-angle-right:before,
.icon-apple:before,
.icon-arrow-box-down:before,
.icon-arrow-circle-o-down:before,
.icon-arrow-circle-o-up:before,
.icon-arrow-circle-right:before,
.icon-arrow-reply:before,
.icon-arrow-up:before,
.icon-asterisk:before,
.icon-autosubscribe:before,
.icon-badge:before,
.icon-ban:before,
.icon-bar-chart:before,
.icon-bar-chart-o:before,
.icon-bars:before,
.icon-be-first:before,
.icon-bell-o:before,
.icon-board:before,
.icon-bookmark:before,
.icon-bookmark-o:before,
.icon-briefcase:before,
.icon-briefcase-menu:before,
.icon-briefcase-o:before,
.icon-building-o:before,
.icon-calendar:before,
.icon-calendar-o:before,
.icon-camera:before,
.icon-camera-o:before,
.icon-camera-retro:before,
.icon-cards-menu:before,
.icon-caret-down:before,
.icon-caret-square-o-up:before,
.icon-caret-up:before,
.icon-cat-air-conditioner:before,
.icon-cat-alarm:before,
.icon-cat-antenna:before,
.icon-cat-arm-chair:before,
.icon-cat-awning:before,
.icon-cat-box:before,
.icon-cat-bricks:before,
.icon-cat-bricks-trowel:before,
.icon-cat-broken-leak:before,
.icon-cat-building:before,
.icon-cat-certificate:before,
.icon-cat-closet:before,
.icon-cat-crane:before,
.icon-cat-default:before,
.icon-cat-demolition:before,
.icon-cat-drill:before,
.icon-cat-elevator:before,
.icon-cat-fire-extinguisher:before,
.icon-cat-fireplace:before,
.icon-cat-fridge:before,
.icon-cat-gas-mask:before,
.icon-cat-handshake:before,
.icon-cat-house-trowel:before,
.icon-cat-key:before,
.icon-cat-license:before,
.icon-cat-light-bulb:before,
.icon-cat-open-door:before,
.icon-cat-oven:before,
.icon-cat-parquet:before,
.icon-cat-picture:before,
.icon-cat-piping:before,
.icon-cat-plant:before,
.icon-cat-plug:before,
.icon-cat-radiator:before,
.icon-cat-roller:before,
.icon-cat-roof:before,
.icon-cat-saw:before,
.icon-cat-shiny-tile:before,
.icon-cat-shovel:before,
.icon-cat-solar-farm:before,
.icon-cat-soundproof:before,
.icon-cat-store:before,
.icon-cat-swimming-pool:before,
.icon-cat-technician:before,
.icon-cat-tools:before,
.icon-cat-trowel:before,
.icon-cat-truck:before,
.icon-cat-vacuum:before,
.icon-cat-wall:before,
.icon-cat-waterproof:before,
.icon-cat-wind-farm:before,
.icon-cat-window:before,
.icon-certificate:before,
.icon-chart-no-line:before,
.icon-check:before,
.icon-check-circle:before,
.icon-check-circle-o:before,
.icon-check-o:before,
.icon-check-square:before,
.icon-check-square-o:before,
.icon-check-thin:before,
.icon-chevron-down:before,
.icon-chevron-left:before,
.icon-chevron-right:before,
.icon-chevron-up:before,
.icon-circle:before,
.icon-circle-o:before,
.icon-clip:before,
.icon-clock:before,
.icon-clock-o:before,
.icon-close:before,
.icon-close-o:before,
.icon-code:before,
.icon-cogs:before,
.icon-comment:before,
.icon-comment-o:before,
.icon-comments:before,
.icon-comments-o:before,
.icon-contact-data:before,
.icon-control-panel:before,
.icon-credit-card:before,
.icon-customer-note:before,
.icon-desktop:before,
.icon-details:before,
.icon-diamond:before,
.icon-directorio:before,
.icon-directorio-marcas:before,
.icon-download:before,
.icon-download-o:before,
.icon-edit:before,
.icon-edit-o:before,
.icon-ellipsis-h:before,
.icon-emails-o:before,
.icon-envelope:before,
.icon-envelope-o:before,
.icon-exclamation-circle:before,
.icon-exclamation-triangle:before,
.icon-expand:before,
.icon-external-link-square:before,
.icon-eye:before,
.icon-facebook:before,
.icon-facebook-o:before,
.icon-facebook-square:before,
.icon-file-o:before,
.icon-file-text:before,
.icon-file-text-o:before,
.icon-files-o:before,
.icon-files-papers:before,
.icon-filter-o:before,
.icon-flickr:before,
.icon-floppy-o:before,
.icon-folder:before,
.icon-folder-open:before,
.icon-folder-open-o:before,
.icon-frequent-user:before,
.icon-frown-o:before,
.icon-funnel-o:before,
.icon-galeria-fotos:before,
.icon-gear-o:before,
.icon-gift:before,
.icon-globe:before,
.icon-google:before,
.icon-google-plus:before,
.icon-google-plus-o:before,
.icon-heart:before,
.icon-heart-o:before,
.icon-home:before,
.icon-home-o:before,
.icon-id:before,
.icon-ideas-proyectos:before,
.icon-info:before,
.icon-info-circle:before,
.icon-info-circle-o:before,
.icon-instagram:before,
.icon-invoices:before,
.icon-jobs:before,
.icon-key:before,
.icon-label-border:before,
.icon-landscape:before,
.icon-left-arrow-circle:before,
.icon-life-ring:before,
.icon-lifebuoy-o:before,
.icon-lightbulb-o:before,
.icon-link:before,
.icon-linkedin:before,
.icon-list:before,
.icon-list-ul:before,
.icon-location:before,
.icon-lock:before,
.icon-lock-o:before,
.icon-map-marker:before,
.icon-map-marker-o:before,
.icon-medal:before,
.icon-megaphone:before,
.icon-microphone:before,
.icon-minus-circle-o:before,
.icon-minus-square-o:before,
.icon-mobile:before,
.icon-money:before,
.icon-money-o:before,
.icon-more-circle-o:before,
.icon-my-contacts-menu:before,
.icon-news-o:before,
.icon-notebook:before,
.icon-ofertas:before,
.icon-one-file:before,
.icon-paper-plane-fly:before,
.icon-paper-plane-o:before,
.icon-pencil:before,
.icon-pencil-o:before,
.icon-pencil-square-o:before,
.icon-phone:before,
.icon-phone-o:before,
.icon-phone-ringing:before,
.icon-phone-square:before,
.icon-picture-o:before,
.icon-pinterest:before,
.icon-pinterest-o:before,
.icon-play:before,
.icon-play-circle-o:before,
.icon-play-o:before,
.icon-plus:before,
.icon-plus-circle:before,
.icon-plus-square:before,
.icon-plus-square-o:before,
.icon-preguntas:before,
.icon-price-down:before,
.icon-price-tag:before,
.icon-price-up:before,
.icon-prioritary-menu:before,
.icon-prize:before,
.icon-professional:before,
.icon-profile:before,
.icon-public-web:before,
.icon-question:before,
.icon-question-o:before,
.icon-reformapedia:before,
.icon-refresh:before,
.icon-remove:before,
.icon-reply:before,
.icon-right-arrow-circle:before,
.icon-roller:before,
.icon-scissors:before,
.icon-scissors-o:before,
.icon-search:before,
.icon-search-o:before,
.icon-share:before,
.icon-share-alt:before,
.icon-share-o:before,
.icon-share-square-o:before,
.icon-signal:before,
.icon-sitemap:before,
.icon-sort-amount-asc:before,
.icon-sort-asc:before,
.icon-sort-desc:before,
.icon-spinner:before,
.icon-star:before,
.icon-star-half:before,
.icon-star-half-empty:before,
.icon-star-half-o:before,
.icon-star-o:before,
.icon-stars-o:before,
.icon-suitcase:before,
.icon-tachometer:before,
.icon-tag:before,
.icon-tags:before,
.icon-tags-o:before,
.icon-th-list:before,
.icon-thumb-tack:before,
.icon-thumbs-down:before,
.icon-thumbs-up:before,
.icon-timer:before,
.icon-times:before,
.icon-times-circle:before,
.icon-times-circle-o:before,
.icon-transacciones:before,
.icon-trash-o:before,
.icon-trophy:before,
.icon-tu-negocio:before,
.icon-turn-off:before,
.icon-twitter:before,
.icon-twitter-o:before,
.icon-undo:before,
.icon-unlock:before,
.icon-up-arrow-square:before,
.icon-updated-small:before,
.icon-urgencias:before,
.icon-user:before,
.icon-users:before,
.icon-users-o:before,
.icon-video-camera:before,
.icon-warning:before,
.icon-whatsapp:before,
.icon-wrench:before,
.icon-youtube:before {
  display: inline-block;
  font-family: "iconissimo";
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  line-height: 1;
  text-decoration: inherit;
  text-rendering: optimizeLegibility;
  text-transform: none;
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  font-smoothing: antialiased;
}

.icon-add-album:before { content: "\f100"; }
.icon-add-info:before { content: "\f101"; }
.icon-album:before { content: "\f102"; }
.icon-android:before { content: "\f103"; }
.icon-angle-down:before { content: "\f104"; }
.icon-angle-right:before { content: "\f105"; }
.icon-apple:before { content: "\f106"; }
.icon-arrow-box-down:before { content: "\f107"; }
.icon-arrow-circle-o-down:before { content: "\f108"; }
.icon-arrow-circle-o-up:before { content: "\f109"; }
.icon-arrow-circle-right:before { content: "\f10a"; }
.icon-arrow-reply:before { content: "\f10b"; }
.icon-arrow-up:before { content: "\f10c"; }
.icon-asterisk:before { content: "\f10d"; }
.icon-autosubscribe:before { content: "\f21c"; }
.icon-badge:before { content: "\f224"; }
.icon-ban:before { content: "\f10e"; }
.icon-bar-chart:before { content: "\f10f"; }
.icon-bar-chart-o:before { content: "\f110"; }
.icon-bars:before { content: "\f111"; }
.icon-be-first:before { content: "\f112"; }
.icon-bell-o:before { content: "\f113"; }
.icon-board:before { content: "\f114"; }
.icon-bookmark:before { content: "\f115"; }
.icon-bookmark-o:before { content: "\f116"; }
.icon-briefcase:before { content: "\f117"; }
.icon-briefcase-menu:before { content: "\f118"; }
.icon-briefcase-o:before { content: "\f119"; }
.icon-building-o:before { content: "\f11a"; }
.icon-calendar:before { content: "\f11b"; }
.icon-calendar-o:before { content: "\f11c"; }
.icon-camera:before { content: "\f11d"; }
.icon-camera-o:before { content: "\f11e"; }
.icon-camera-retro:before { content: "\f11f"; }
.icon-cards-menu:before { content: "\f120"; }
.icon-caret-down:before { content: "\f121"; }
.icon-caret-square-o-up:before { content: "\f122"; }
.icon-caret-up:before { content: "\f123"; }
.icon-cat-air-conditioner:before { content: "\f124"; }
.icon-cat-alarm:before { content: "\f125"; }
.icon-cat-antenna:before { content: "\f126"; }
.icon-cat-arm-chair:before { content: "\f127"; }
.icon-cat-awning:before { content: "\f128"; }
.icon-cat-box:before { content: "\f129"; }
.icon-cat-bricks:before { content: "\f12a"; }
.icon-cat-bricks-trowel:before { content: "\f12b"; }
.icon-cat-broken-leak:before { content: "\f12c"; }
.icon-cat-building:before { content: "\f12d"; }
.icon-cat-certificate:before { content: "\f12e"; }
.icon-cat-closet:before { content: "\f12f"; }
.icon-cat-crane:before { content: "\f130"; }
.icon-cat-default:before { content: "\f131"; }
.icon-cat-demolition:before { content: "\f132"; }
.icon-cat-drill:before { content: "\f133"; }
.icon-cat-elevator:before { content: "\f134"; }
.icon-cat-fire-extinguisher:before { content: "\f135"; }
.icon-cat-fireplace:before { content: "\f136"; }
.icon-cat-fridge:before { content: "\f137"; }
.icon-cat-gas-mask:before { content: "\f138"; }
.icon-cat-handshake:before { content: "\f139"; }
.icon-cat-house-trowel:before { content: "\f13a"; }
.icon-cat-key:before { content: "\f13b"; }
.icon-cat-license:before { content: "\f13c"; }
.icon-cat-light-bulb:before { content: "\f13d"; }
.icon-cat-open-door:before { content: "\f13e"; }
.icon-cat-oven:before { content: "\f13f"; }
.icon-cat-parquet:before { content: "\f140"; }
.icon-cat-picture:before { content: "\f141"; }
.icon-cat-piping:before { content: "\f142"; }
.icon-cat-plant:before { content: "\f143"; }
.icon-cat-plug:before { content: "\f144"; }
.icon-cat-radiator:before { content: "\f145"; }
.icon-cat-roller:before { content: "\f146"; }
.icon-cat-roof:before { content: "\f147"; }
.icon-cat-saw:before { content: "\f148"; }
.icon-cat-shiny-tile:before { content: "\f149"; }
.icon-cat-shovel:before { content: "\f14a"; }
.icon-cat-solar-farm:before { content: "\f14b"; }
.icon-cat-soundproof:before { content: "\f14c"; }
.icon-cat-store:before { content: "\f14d"; }
.icon-cat-swimming-pool:before { content: "\f14e"; }
.icon-cat-technician:before { content: "\f14f"; }
.icon-cat-tools:before { content: "\f150"; }
.icon-cat-trowel:before { content: "\f151"; }
.icon-cat-truck:before { content: "\f152"; }
.icon-cat-vacuum:before { content: "\f153"; }
.icon-cat-wall:before { content: "\f154"; }
.icon-cat-waterproof:before { content: "\f155"; }
.icon-cat-wind-farm:before { content: "\f156"; }
.icon-cat-window:before { content: "\f157"; }
.icon-certificate:before { content: "\f158"; }
.icon-chart-no-line:before { content: "\f159"; }
.icon-check:before { content: "\f15a"; }
.icon-check-circle:before { content: "\f15b"; }
.icon-check-circle-o:before { content: "\f15c"; }
.icon-check-o:before { content: "\f15d"; }
.icon-check-square:before { content: "\f15e"; }
.icon-check-square-o:before { content: "\f15f"; }
.icon-check-thin:before { content: "\f160"; }
.icon-chevron-down:before { content: "\f161"; }
.icon-chevron-left:before { content: "\f162"; }
.icon-chevron-right:before { content: "\f163"; }
.icon-chevron-up:before { content: "\f164"; }
.icon-circle:before { content: "\f165"; }
.icon-circle-o:before { content: "\f166"; }
.icon-clip:before { content: "\f167"; }
.icon-clock:before { content: "\f168"; }
.icon-clock-o:before { content: "\f169"; }
.icon-close:before { content: "\f16a"; }
.icon-close-o:before { content: "\f16b"; }
.icon-code:before { content: "\f16c"; }
.icon-cogs:before { content: "\f16d"; }
.icon-comment:before { content: "\f16e"; }
.icon-comment-o:before { content: "\f16f"; }
.icon-comments:before { content: "\f170"; }
.icon-comments-o:before { content: "\f171"; }
.icon-contact-data:before { content: "\f172"; }
.icon-control-panel:before { content: "\f221"; }
.icon-credit-card:before { content: "\f173"; }
.icon-customer-note:before { content: "\f174"; }
.icon-desktop:before { content: "\f21e"; }
.icon-details:before { content: "\f175"; }
.icon-diamond:before { content: "\f176"; }
.icon-directorio:before { content: "\f177"; }
.icon-directorio-marcas:before { content: "\f178"; }
.icon-download:before { content: "\f179"; }
.icon-download-o:before { content: "\f17a"; }
.icon-edit:before { content: "\f17b"; }
.icon-edit-o:before { content: "\f17c"; }
.icon-ellipsis-h:before { content: "\f17d"; }
.icon-emails-o:before { content: "\f17e"; }
.icon-envelope:before { content: "\f17f"; }
.icon-envelope-o:before { content: "\f180"; }
.icon-exclamation-circle:before { content: "\f181"; }
.icon-exclamation-triangle:before { content: "\f182"; }
.icon-expand:before { content: "\f183"; }
.icon-external-link-square:before { content: "\f184"; }
.icon-eye:before { content: "\f185"; }
.icon-facebook:before { content: "\f186"; }
.icon-facebook-o:before { content: "\f187"; }
.icon-facebook-square:before { content: "\f188"; }
.icon-file-o:before { content: "\f189"; }
.icon-file-text:before { content: "\f18a"; }
.icon-file-text-o:before { content: "\f18b"; }
.icon-files-o:before { content: "\f18c"; }
.icon-files-papers:before { content: "\f18d"; }
.icon-filter-o:before { content: "\f18e"; }
.icon-flickr:before { content: "\f18f"; }
.icon-floppy-o:before { content: "\f190"; }
.icon-folder:before { content: "\f191"; }
.icon-folder-open:before { content: "\f192"; }
.icon-folder-open-o:before { content: "\f193"; }
.icon-frequent-user:before { content: "\f194"; }
.icon-frown-o:before { content: "\f195"; }
.icon-funnel-o:before { content: "\f196"; }
.icon-galeria-fotos:before { content: "\f197"; }
.icon-gear-o:before { content: "\f198"; }
.icon-gift:before { content: "\f199"; }
.icon-globe:before { content: "\f19a"; }
.icon-google:before { content: "\f19b"; }
.icon-google-plus:before { content: "\f19c"; }
.icon-google-plus-o:before { content: "\f19d"; }
.icon-heart:before { content: "\f19e"; }
.icon-heart-o:before { content: "\f19f"; }
.icon-home:before { content: "\f1a0"; }
.icon-home-o:before { content: "\f1a1"; }
.icon-id:before { content: "\f1a2"; }
.icon-ideas-proyectos:before { content: "\f1a3"; }
.icon-info:before { content: "\f1a4"; }
.icon-info-circle:before { content: "\f1a5"; }
.icon-info-circle-o:before { content: "\f1a6"; }
.icon-instagram:before { content: "\f1a7"; }
.icon-invoices:before { content: "\f220"; }
.icon-jobs:before { content: "\f21d"; }
.icon-key:before { content: "\f1a8"; }
.icon-label-border:before { content: "\f1a9"; }
.icon-landscape:before { content: "\f1aa"; }
.icon-left-arrow-circle:before { content: "\f1ab"; }
.icon-life-ring:before { content: "\f1ac"; }
.icon-lifebuoy-o:before { content: "\f1ad"; }
.icon-lightbulb-o:before { content: "\f1ae"; }
.icon-link:before { content: "\f1af"; }
.icon-linkedin:before { content: "\f1b0"; }
.icon-list:before { content: "\f1b1"; }
.icon-list-ul:before { content: "\f1b2"; }
.icon-location:before { content: "\f1b3"; }
.icon-lock:before { content: "\f1b4"; }
.icon-lock-o:before { content: "\f1b5"; }
.icon-map-marker:before { content: "\f1b6"; }
.icon-map-marker-o:before { content: "\f1b7"; }
.icon-medal:before { content: "\f1b8"; }
.icon-megaphone:before { content: "\f1b9"; }
.icon-microphone:before { content: "\f1ba"; }
.icon-minus-circle-o:before { content: "\f1bb"; }
.icon-minus-square-o:before { content: "\f1bc"; }
.icon-mobile:before { content: "\f1bd"; }
.icon-money:before { content: "\f1be"; }
.icon-money-o:before { content: "\f1bf"; }
.icon-more-circle-o:before { content: "\f1c0"; }
.icon-my-contacts-menu:before { content: "\f1c1"; }
.icon-news-o:before { content: "\f1c2"; }
.icon-notebook:before { content: "\f1c3"; }
.icon-ofertas:before { content: "\f1c4"; }
.icon-one-file:before { content: "\f1c5"; }
.icon-paper-plane-fly:before { content: "\f1c6"; }
.icon-paper-plane-o:before { content: "\f1c7"; }
.icon-pencil:before { content: "\f1c8"; }
.icon-pencil-o:before { content: "\f21f"; }
.icon-pencil-square-o:before { content: "\f1c9"; }
.icon-phone:before { content: "\f1ca"; }
.icon-phone-o:before { content: "\f1cb"; }
.icon-phone-ringing:before { content: "\f1cc"; }
.icon-phone-square:before { content: "\f1cd"; }
.icon-picture-o:before { content: "\f1ce"; }
.icon-pinterest:before { content: "\f1cf"; }
.icon-pinterest-o:before { content: "\f1d0"; }
.icon-play:before { content: "\f1d1"; }
.icon-play-circle-o:before { content: "\f1d2"; }
.icon-play-o:before { content: "\f225"; }
.icon-plus:before { content: "\f1d3"; }
.icon-plus-circle:before { content: "\f1d4"; }
.icon-plus-square:before { content: "\f1d5"; }
.icon-plus-square-o:before { content: "\f1d6"; }
.icon-preguntas:before { content: "\f1d7"; }
.icon-price-down:before { content: "\f1d8"; }
.icon-price-tag:before { content: "\f1d9"; }
.icon-price-up:before { content: "\f1da"; }
.icon-prioritary-menu:before { content: "\f1db"; }
.icon-prize:before { content: "\f1dc"; }
.icon-professional:before { content: "\f1dd"; }
.icon-profile:before { content: "\f1de"; }
.icon-public-web:before { content: "\f223"; }
.icon-question:before { content: "\f1df"; }
.icon-question-o:before { content: "\f1e0"; }
.icon-reformapedia:before { content: "\f1e1"; }
.icon-refresh:before { content: "\f1e2"; }
.icon-remove:before { content: "\f1e3"; }
.icon-reply:before { content: "\f1e4"; }
.icon-right-arrow-circle:before { content: "\f1e5"; }
.icon-roller:before { content: "\f1e6"; }
.icon-scissors:before { content: "\f1e7"; }
.icon-scissors-o:before { content: "\f1e8"; }
.icon-search:before { content: "\f1e9"; }
.icon-search-o:before { content: "\f1ea"; }
.icon-share:before { content: "\f1eb"; }
.icon-share-alt:before { content: "\f1ec"; }
.icon-share-o:before { content: "\f1ed"; }
.icon-share-square-o:before { content: "\f1ee"; }
.icon-signal:before { content: "\f1ef"; }
.icon-sitemap:before { content: "\f1f0"; }
.icon-sort-amount-asc:before { content: "\f1f1"; }
.icon-sort-asc:before { content: "\f1f2"; }
.icon-sort-desc:before { content: "\f1f3"; }
.icon-spinner:before { content: "\f1f4"; }
.icon-star:before { content: "\f1f5"; }
.icon-star-half:before { content: "\f1f6"; }
.icon-star-half-empty:before { content: "\f1f7"; }
.icon-star-half-o:before { content: "\f1f8"; }
.icon-star-o:before { content: "\f1f9"; }
.icon-stars-o:before { content: "\f1fa"; }
.icon-suitcase:before { content: "\f1fb"; }
.icon-tachometer:before { content: "\f1fc"; }
.icon-tag:before { content: "\f1fd"; }
.icon-tags:before { content: "\f1fe"; }
.icon-tags-o:before { content: "\f1ff"; }
.icon-th-list:before { content: "\f200"; }
.icon-thumb-tack:before { content: "\f201"; }
.icon-thumbs-down:before { content: "\f202"; }
.icon-thumbs-up:before { content: "\f203"; }
.icon-timer:before { content: "\f204"; }
.icon-times:before { content: "\f205"; }
.icon-times-circle:before { content: "\f206"; }
.icon-times-circle-o:before { content: "\f207"; }
.icon-transacciones:before { content: "\f208"; }
.icon-trash-o:before { content: "\f209"; }
.icon-trophy:before { content: "\f20a"; }
.icon-tu-negocio:before { content: "\f20b"; }
.icon-turn-off:before { content: "\f20c"; }
.icon-twitter:before { content: "\f20d"; }
.icon-twitter-o:before { content: "\f20e"; }
.icon-undo:before { content: "\f20f"; }
.icon-unlock:before { content: "\f210"; }
.icon-up-arrow-square:before { content: "\f211"; }
.icon-updated-small:before { content: "\f212"; }
.icon-urgencias:before { content: "\f213"; }
.icon-user:before { content: "\f214"; }
.icon-users:before { content: "\f215"; }
.icon-users-o:before { content: "\f216"; }
.icon-video-camera:before { content: "\f217"; }
.icon-warning:before { content: "\f218"; }
.icon-whatsapp:before { content: "\f219"; }
.icon-wrench:before { content: "\f21a"; }
.icon-youtube:before { content: "\f21b"; }